{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Bikeshare线性回归模型\n",
    "\n",
    "针对3种模型分别进行分析，比较模型的优缺点。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 导入必要的工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据读取及基本处理\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "import matplotlib.pyplot as plt   #画图\n",
    "import seaborn as sn\n",
    "\n",
    "# 图形出现在Notebook里而不是新窗口\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读入数据\n",
    "\n",
    "数据预处理对训练数据和测试数据需进行同样处理，因此将二者一起读入"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "      <td>331</td>\n",
       "      <td>654</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2011-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "      <td>131</td>\n",
       "      <td>670</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2011-01-03</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "      <td>120</td>\n",
       "      <td>1229</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2011-01-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "      <td>108</td>\n",
       "      <td>1454</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2011-01-05</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>82</td>\n",
       "      <td>1518</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant      dteday  season  yr  mnth  holiday  weekday  workingday  \\\n",
       "0        1  2011-01-01       1   0     1        0        6           0   \n",
       "1        2  2011-01-02       1   0     1        0        0           0   \n",
       "2        3  2011-01-03       1   0     1        0        1           1   \n",
       "3        4  2011-01-04       1   0     1        0        2           1   \n",
       "4        5  2011-01-05       1   0     1        0        3           1   \n",
       "\n",
       "   weathersit      temp     atemp       hum  windspeed  casual  registered  \\\n",
       "0           2  0.344167  0.363625  0.805833   0.160446     331         654   \n",
       "1           2  0.363478  0.353739  0.696087   0.248539     131         670   \n",
       "2           1  0.196364  0.189405  0.437273   0.248309     120        1229   \n",
       "3           1  0.200000  0.212122  0.590435   0.160296     108        1454   \n",
       "4           1  0.226957  0.229270  0.436957   0.186900      82        1518   \n",
       "\n",
       "    cnt  \n",
       "0   985  \n",
       "1   801  \n",
       "2  1349  \n",
       "3  1562  \n",
       "4  1600  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读入数据\n",
    "train = pd.read_csv(\"day.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train : (731, 16)\n"
     ]
    }
   ],
   "source": [
    "print(\"train : \" + str(train.shape))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据探索\n",
    "\n",
    "对数据的探索有助于我们根据数据的特点选择合适的模型类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>366.000000</td>\n",
       "      <td>2.496580</td>\n",
       "      <td>0.500684</td>\n",
       "      <td>6.519836</td>\n",
       "      <td>0.028728</td>\n",
       "      <td>2.997264</td>\n",
       "      <td>0.683995</td>\n",
       "      <td>1.395349</td>\n",
       "      <td>0.495385</td>\n",
       "      <td>0.474354</td>\n",
       "      <td>0.627894</td>\n",
       "      <td>0.190486</td>\n",
       "      <td>848.176471</td>\n",
       "      <td>3656.172367</td>\n",
       "      <td>4504.348837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>211.165812</td>\n",
       "      <td>1.110807</td>\n",
       "      <td>0.500342</td>\n",
       "      <td>3.451913</td>\n",
       "      <td>0.167155</td>\n",
       "      <td>2.004787</td>\n",
       "      <td>0.465233</td>\n",
       "      <td>0.544894</td>\n",
       "      <td>0.183051</td>\n",
       "      <td>0.162961</td>\n",
       "      <td>0.142429</td>\n",
       "      <td>0.077498</td>\n",
       "      <td>686.622488</td>\n",
       "      <td>1560.256377</td>\n",
       "      <td>1937.211452</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.059130</td>\n",
       "      <td>0.079070</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.022392</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>22.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>183.500000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.337083</td>\n",
       "      <td>0.337842</td>\n",
       "      <td>0.520000</td>\n",
       "      <td>0.134950</td>\n",
       "      <td>315.500000</td>\n",
       "      <td>2497.000000</td>\n",
       "      <td>3152.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>366.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.498333</td>\n",
       "      <td>0.486733</td>\n",
       "      <td>0.626667</td>\n",
       "      <td>0.180975</td>\n",
       "      <td>713.000000</td>\n",
       "      <td>3662.000000</td>\n",
       "      <td>4548.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>548.500000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.655417</td>\n",
       "      <td>0.608602</td>\n",
       "      <td>0.730209</td>\n",
       "      <td>0.233214</td>\n",
       "      <td>1096.000000</td>\n",
       "      <td>4776.500000</td>\n",
       "      <td>5956.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>731.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>0.861667</td>\n",
       "      <td>0.840896</td>\n",
       "      <td>0.972500</td>\n",
       "      <td>0.507463</td>\n",
       "      <td>3410.000000</td>\n",
       "      <td>6946.000000</td>\n",
       "      <td>8714.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          instant      season          yr        mnth     holiday     weekday  \\\n",
       "count  731.000000  731.000000  731.000000  731.000000  731.000000  731.000000   \n",
       "mean   366.000000    2.496580    0.500684    6.519836    0.028728    2.997264   \n",
       "std    211.165812    1.110807    0.500342    3.451913    0.167155    2.004787   \n",
       "min      1.000000    1.000000    0.000000    1.000000    0.000000    0.000000   \n",
       "25%    183.500000    2.000000    0.000000    4.000000    0.000000    1.000000   \n",
       "50%    366.000000    3.000000    1.000000    7.000000    0.000000    3.000000   \n",
       "75%    548.500000    3.000000    1.000000   10.000000    0.000000    5.000000   \n",
       "max    731.000000    4.000000    1.000000   12.000000    1.000000    6.000000   \n",
       "\n",
       "       workingday  weathersit        temp       atemp         hum   windspeed  \\\n",
       "count  731.000000  731.000000  731.000000  731.000000  731.000000  731.000000   \n",
       "mean     0.683995    1.395349    0.495385    0.474354    0.627894    0.190486   \n",
       "std      0.465233    0.544894    0.183051    0.162961    0.142429    0.077498   \n",
       "min      0.000000    1.000000    0.059130    0.079070    0.000000    0.022392   \n",
       "25%      0.000000    1.000000    0.337083    0.337842    0.520000    0.134950   \n",
       "50%      1.000000    1.000000    0.498333    0.486733    0.626667    0.180975   \n",
       "75%      1.000000    2.000000    0.655417    0.608602    0.730209    0.233214   \n",
       "max      1.000000    3.000000    0.861667    0.840896    0.972500    0.507463   \n",
       "\n",
       "            casual   registered          cnt  \n",
       "count   731.000000   731.000000   731.000000  \n",
       "mean    848.176471  3656.172367  4504.348837  \n",
       "std     686.622488  1560.256377  1937.211452  \n",
       "min       2.000000    20.000000    22.000000  \n",
       "25%     315.500000  2497.000000  3152.000000  \n",
       "50%     713.000000  3662.000000  4548.000000  \n",
       "75%    1096.000000  4776.500000  5956.000000  \n",
       "max    3410.000000  6946.000000  8714.000000  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对数据值型特征，用常用统计量观察其分布\n",
    "train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "season属性的不同取值和出现的次数\n",
      "3    188\n",
      "2    184\n",
      "1    181\n",
      "4    178\n",
      "Name: season, dtype: int64\n",
      "\n",
      "mnth属性的不同取值和出现的次数\n",
      "12    62\n",
      "10    62\n",
      "8     62\n",
      "7     62\n",
      "5     62\n",
      "3     62\n",
      "1     62\n",
      "11    60\n",
      "9     60\n",
      "6     60\n",
      "4     60\n",
      "2     57\n",
      "Name: mnth, dtype: int64\n",
      "\n",
      "weathersit属性的不同取值和出现的次数\n",
      "1    463\n",
      "2    247\n",
      "3     21\n",
      "Name: weathersit, dtype: int64\n",
      "\n",
      "weekday属性的不同取值和出现的次数\n",
      "6    105\n",
      "1    105\n",
      "0    105\n",
      "5    104\n",
      "4    104\n",
      "3    104\n",
      "2    104\n",
      "Name: weekday, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "#对类别型特征，观察其取值范围及直方图\n",
    "categorical_features = ['season','mnth','weathersit','weekday']\n",
    "for col in categorical_features:\n",
    "    print '\\n%s属性的不同取值和出现的次数'%col\n",
    "    print train[col].value_counts()\n",
    "    train[col] = train[col].astype('object')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "类别型特征的取值不多\n",
    "类别型特征可以采用独热编码（One hot encoding）/哑编码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 每年的分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/ice2018/anaconda2/lib/python2.7/site-packages/scipy/stats/stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
      "  return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f5ba5f12090>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZUAAAEKCAYAAADaa8itAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xd4VFX+x/H3mZpMEtLopADSm5SALF0B6cW6uK5tXbB3XXR37e2nrrqr64IFFGQX3V0bCoKAFOmCINJDSwgJSUgjfTKZ8/sjAxsFNITJ3Cnf1/PkycydO3M/IcN8c8859xyltUYIIYTwBpPRAYQQQgQPKSpCCCG8RoqKEEIIr5GiIoQQwmukqAghhPAaKSpCCCG8RoqKEEIIr5GiIoQQwmukqAghhPAai9EBfK1x48a6devWRscQQoiAsWXLluNa6yZ12Tfkikrr1q3ZvHmz0TGEECJgKKXS6rqvNH8JIYTwmgYrKkqp2UqpHKXUjlrb4pRSS5VSqZ7vsZ7tSin1mlJqv1Jqu1Kqd63n3ODZP1UpdUOt7X2UUj94nvOaUko11M8ihBCibhryTOU9YPRPtj0MLNdatweWe+4DjAHae76mATOgpggBjwMXAf2Ax08WIs8+02o976fHEkII4WMNVlS01quB/J9sngTM8dyeA0yutX2urrEBiFFKtQBGAUu11vla6wJgKTDa81gjrfV6XTN3/9xaryWEEMIgvu5Taaa1zgLwfG/q2d4KOFJrvwzPtp/bnnGG7UIIIQzkLx31Z+oP0fXYfuYXV2qaUmqzUmpzbm5uPSMKIYT4Jb4uKtmepis833M82zOAxFr7JQCZv7A94Qzbz0hr/ZbWOkVrndKkSZ2GWgshhKgHXxeVBcDJEVw3AJ/V2n69ZxRYf6DI0zy2BLhUKRXr6aC/FFjieaxYKdXfM+rr+lqvJYQIcVprZKl0YzTkkOL5wHqgo1IqQyl1M/B/wEilVCow0nMfYBFwENgPvA3cDqC1zgeeBr71fD3l2QZwG/CO5zkHgC8b6mcRQgSWF154gYkTJ1BeXm50lJDTYFfUa62vOctDw8+wrwbuOMvrzAZmn2H7ZqDb+WQUQgSnxYsXA5Cfn0+rVjKGx5f8paNeCCG8rqyszOgIIUeKihAiaJ04ccLoCCFHiooQIqhUV1eful1YWGhgktAkRUUIEVTy8vJO3Zbr0nxPiooQIqhkZ2efun3s2DEDk4QmKSpCiKCSnp4OQKRVn7otfEeKihAiqBw6dAibGS6Mr+Tggf1yEaSPSVERQgSVnTt+oE2UiwsauSgsOiFNYD4mRUUIETTKysrYl5pK++gqOsS4ANi2bZvBqUKLFBUhRNDYtGkT1dVuesQ5SYioJjYM1q1ba3SskCJFRQgRNFasWEGUDTrEuDAp6BNfwaaNGyktLTU6WsiQoiKECAp5eXmsWfMNA5qVY/KsuDSoRQWVziqWLFlibLgQIkVFCBEUPvnkE6qr3YxoVXFqW9tG1bRtVM1H//0PLpfLwHShQ4qKECLgHT9+nP/8599c1LSSZg73jx6bkFzK0cwsFi5caFC60CJFRQgR8GbOnImryslVF5w+K3HvxjUjwd6d9Y7MBeYDUlSEEAFt5cqVLFu2jAlJZTQNd5/2uFJwfYcSSkqKefkvf5GLIRuYFBUhRMA6cuQIL7/0Em0bVTOx9dlXeUyKrOaKNqV8s2YNn3zyiQ8Thh4pKkKIgFRYWMgfHnoQ5Srl9q4nsNT6NJu3z8G8fY4f7T8mqYJejZ38/fXXWbdunY/Thg4pKkKIgHOyoBzPzebebkWnNXull1hIL/nxaukmBbd3LSY5ysWTTzzO5s2bfRk5ZEhREUIElOPHj3PP3Xdx6OB+7u56gnbRdR8qbDfDAz2KaGqr5JGHp7NmzZoGTBqapKgIIQLGvn37uP22W8nOPMKDPYq4sHHVOb9GI5vmkV6FJEU4eeyxx/jPf/4jnfdeJEVFCBEQvvzyS+6443aqS47zSM9COsfW/2LGSKtm+oWF9Iqr4I033uCZZ56hvPzsHf2i7iy/vIsQQhinuLiY119/na+++oousS5u73qCRrbzP7MIs8Bd3Yv5Ii2cj5YvZ/++vTzypz/TqVMnL6QOXXKmIoTwW5s2beKmG29g2dKvmNy6jIcuLPJKQTnJpGBi63Ie6nmCE7kZ3H777cyePZuqqnNvVhM15ExFCOF38vLymDlzJkuXLqVlhOaxPkW0bVTdYMfrFlfFc33zmZfqYO7cuaxetZJ777ufnj17Ntgxg5UUFSGE33C5XHz66afMnvUOzsoKJiSXMal1OTZzwx87wqq5pUsp/Zo6eT81jXvvvZcRI0Zw2223ER8f3/ABgoQUFSGE4bTWrFu3jrfenEla+hF6xFfx2wtLaO44fdqVhtarcRVdYvP5Ii2cRV8vY+2ab5hyzW+46qqrcDgcv/wCIc6QPhWl1H1KqZ1KqR1KqflKqTClVBul1EalVKpS6kOllM2zr91zf7/n8da1XucRz/a9SqlRRvwsQojzs3PnTu65+y7+9Kc/UZmXzj3dT/BAjxOGFJST7Ga4om05z/UroFvUCd59912u/c01fPbZZzKF/i/w+ZmKUqoVcDfQRWtdrpT6NzAFGAu8qrX+QCk1E7gZmOH5XqC1bqeUmgK8APxaKdXF87yuQEtgmVKqg9a64RpehRBek5qaynvvvcvateuItsONHUsY0qLyR9OtGK2Zw81d3UtILargwwMuXn31Vf794QfccONNDB8+HLPZB+1yAcaoX58FCFdKWQAHkAVcAvzX8/gcYLLn9iTPfTyPD1dKKc/2D7TWlVrrQ8B+oJ+P8gsh6ungwYM89thjTJ06la2b1nF5mzJeuiiPS1r5V0GprX20iz/1KuLe7icwFR/lueee43c33sCKFStwu407o/JHPj9T0VofVUr9BUgHyoGvgC1Aodb65HllBtDKc7sVcMTzXJdSqgiI92zfUOulaz9HCOFnDh48yNy5c1m1aiVhZpjcuoxRiRVEWAPjanaloHeTKno2LmBzro1PDqfz5JNP0qZ1MtffcCNDhw7FZPLTquhDRjR/xVJzltEGKAT+A4w5w64n32nqLI+dbfuZjjkNmAaQlJR0jomFEOfj4MGDzJnzHqtWrSbMAuOTyhidVEFUgBSTnzIp6NfUSUoTJxuzbXyWdpgnn3yS5KRErr/hRoYNGxbSzWJGjP4aARzSWucCKKU+BgYAMUopi+dsJQHI9OyfASQCGZ7msmggv9b2k2o/50e01m8BbwGkpKQE5jtZiABz4MAB5syZw+rVqwm3wMTWZYxOrCAyQIvJT5kU/Kq5k4ua5bMpx8ZnaWk8/fTTzHnvXW648aaQLS5GFJV0oL9SykFN89dwYDOwArgS+AC4AfjMs/8Cz/31nse/1lprpdQC4F9KqVeo6ahvD2zy5Q8ihDjdj4qJFSZ5mrmCpZj8lElB/2ZO+jV1nmoWC+XiYkSfykal1H+B7wAXsJWas4iFwAdKqWc822Z5njILeF8ptZ+aM5QpntfZ6Rk5tsvzOnfIyC8hjHPkyBFmzZrFypUrCbcGXp/J+ardLFa7uMyd8x6/nzqNQYMGUTPGKLipUJvyOSUlRcviPEJ4T3Z2NnPmzGHx4sVYTW5GtSpjTJKxxeS57xoB8MfeJwzL4NawOdfGR4ciySpVdOzYgalTp9GnT5+AKy5KqS1a65S67CtX1Ash6qWsrIx//etffPjhB+hqFyNblTMhudyrEz4GspNnLn0a57P2mJ1P0vbx4IMP0rdvCnfeeRfJyclGR2wQUlSEEOfE7XazbNky3pzxD/IKChnQrJIrLyijcZhcr3EmZhMMaVnJr5pXsjwjjE+3beamm27isssu48YbbyQqKsroiF4lRUUIUWdHjx7lxRde4Pvt22nbqJrb+5TQ/hyW8w1lVhOMTqpgQPNKPjro4OOPPmL50q+474EHGTp0qNHxvEaKihDiF7ndbj799FPefHMmJreT33WqmVLFFFhdA36hkU1zU6dSLmlVway9bh5//HEuvvhi7rnnHmJiYoyOd96kqAghflZJSQnPPPM0GzZspEd8FTd1LCFemrrOW3JUNY/1LmBhWjifrlrB9m1beea55+ncubPR0c6LzCkghDirjIwMbr/tVr7duJHrO5TwQI8TUlC8yGKCSW3KebJPIabKAu6++y6++uoro2OdFykqQogzOnToELfdegv52Rn8oWcRIxIqCbCRsAEjKaqaJ3oX0C6ygueee47//Oc/RkeqNykqQojTZGVl8eAD92OuKuXx3gV0jpXO+IYWZdM8dGERKU2cvPHGGyxZssToSPUiRUUI8SNVVVX86ZGHKS8u4KELC2lm4GJZocZigtu6FtMlzsULL7zA7t27jY50zqSoCCF+5IMPPuDg4TRu6XyCxEiZ+cjXrCa4u9sJom1u/vLSiwG30qQUFSHEKQUFBcydO4d+TSvp1bjK6Dghy2HRXNe+mAMHD7Fo0SKj45wTKSpCiFO+/vprqqpcTG5dbnSUepu3z0FasZm0YjPPfdeIefscRkeql5QmThIj3Sz+UoqKECJArVzxNclRbhICuNkrvcRCebWJ8moTewqtpJcE7uV4A5qVs2v3HnJycoyOUmdSVIQQp6SlpXFBI6fRMYTHBY1q+lPS09MNTlJ3UlSEEACUl5dzoriEeHvgnqUEm5OTdB47dszgJHUnRUXUS1FREZMvu4wZM2YYHUV4ickkHwf+5uQiAoG0cqS8i0S9ZGRkUFhQwIcffmh0FOElNpsNq8VMqUs+FvxFqatmCgOHI3AGG8i7R9RLUVGR0RGElymlSEhIILM0cP4qDnYnfxeJiYkGJ6k7KSqiXo4fP37qdqgtSR3M2rXvwOESG/Ir9Q+Hii1YrRaSkpKMjlJnUlREvWRlZZ26LWctwaNnz54UVsJROVvxCzsK7PTo0QOLJXCGRUtREfWSlpZ2xtsisPXr1w+AbXlWg5OI4+UmjpaY6Nu3n9FRzokUFVEve/buwxXVHIB9+/YZnEZ4S5MmTejUsQObcsONjhLyNuXaABgyZIjBSc6NFBVxzo4dO0Z+3nFcsa0hLJIffvjB6EjCiy4ZPoLDJ0xklcnHg5E25oTRsUN7WrZsaXSUcyLvGnHONm7cCEB1o5Y4I1uwecuWgJtJVZzd8OHDMSnF2iy70VFCVkaJmUMnzFw6arTRUc6ZFBVxzr7++msIj8YdFo0rNpmy0lK+/fZbo2MJL4mPj6dv376syXbgllFghvgmy47ZbGL48OFGRzlnUlTEOUlLS+P777+nMu4CUIrqRq1Q1nAWLFhgdDThRWPGjiW/AnbkS4e9r7ncsDYnnAEDBhATE2N0nHMmRUWck/nz54PJTFWTjjUbTGYqmnRk/YYNHDhwwNhwwmsGDBhAdKMoVmVKE5ivbT1u40QljB07zugo9SJFRdRZamoqi5cswdm0M9r6v9FBzmZdUWYbb/zjH3IhZJCw2WyMGj2G747bKXIqo+OElJWZYTRpHH9qeHegMaSoKKVilFL/VUrtUUrtVkr9SikVp5RaqpRK9XyP9eyrlFKvKaX2K6W2K6V613qdGzz7pyqlbjDiZwkVTqeT5//v/1DWcCpbXPjjBy12ylv24rstW/jyyy+NCSi8bvz48VRrWC1nKz6TW25iR76VsePGB9QkkrUZdabyN2Cx1roTcCGwG3gYWK61bg8s99wHGAO093xNA2YAKKXigMeBi4B+wOMnC5Hwvtdee42DBw5QlvQrsJz+IVPVtDPuqOa8+te/kpqaakBC4W1JSUn0vPBCVmZJh72vfH00DGUyMW5cYDZ9gQFFRSnVCBgCzALQWju11oXAJGCOZ7c5wGTP7UnAXF1jAxCjlGoBjAKWaq3ztdYFwFIg8MbfBYB58+bxxRdfUNm8O67YZADs6Ruwp2/4305KUXbBMKqUlekPP0xmZqZBaYU3TZo8mdxyxXa5wr7BOavhm+xwBgz4FU2bNjU6Tr0ZcabSFsgF3lVKbVVKvaOUigCaaa2zADzfT/6rtgKO1Hp+hmfb2bafRik1TSm1WSm1OTc317s/TRDTWjN37lzeeecdquIvwJnQ59RjprJ8TGX5P97f6qC03UgKTpRy9z33yPQtQWDw4MHEx8WyNEOusG9oG3PsnKiEyy673Ogo58WIomIBegMztNa9gFL+19R1JmfqJdQ/s/30jVq/pbVO0VqnNGnS5FzzhqTKykpeeOEFZs+eTVX8BVS0GQzql98ubkccJe1HkVdUyq233SbXrwQ4i8XCpMmX8UO+NWAmmSx3KcLCwrjyyisJCwuj3OX/Aw20hq8yHCQnJdK7d+9ffoIfM6KoZAAZWuuNnvv/pabIZHuatfB8z6m1f+3FBBKAzJ/ZLs7TwYMHmXbLLSxevJjKlj2paDOkTgXlJHdEPMWdxlGGnYf+8AfefPNNqqqqGjCxaEgTJ07EbrPyZXqY0VHqpMylGD9+PHfeeSfjxo2jLACKys4CK2nFJq7+9RSU8v+8P8fnRUVrfQw4opTyXOjAcGAXsAA4OYLrBuAzz+0FwPWeUWD9gSJP89gS4FKlVKyng/5SzzZRT5WVlcyePZup06aRnplDWYdLcbbqDfV4k2t7FCWdJuBs3IH58+dz8+9/z/bt2xsgtWhoMTExjB03nrXZYRyv8P+rEBwWzRdffMHrr7/OwoULcVj8f5TB52kO4mNjGDlypNFRzptRk/TfBfxTKWUDDgI3UVPg/q2UuhlIB67y7LsIGAvsB8o8+6K1zldKPQ2cbF95Smv940Z+USdut5uVK1fy5ltvk30si6r4C6hM7Peja1HqxWyhsvVAXDGJpKdv4O6772bkyJH87ne/o0WLFt4JL3xiypQpfPH5Aj4/HM5NnUqNjvOzwi2aipIKPvroo5r7Mf5dVHYVWNhdYOHOO3+LzWYzOs55M6SoaK23ASlneOi0iW50zdV0d5zldWYDs72bLnS43W42bNjArFmzOXBgP9oRR3nH0VQ38u6sqNUxSRRHtcCW9T3Llq/g66+/ZtKkSUyZMiWgR7mEkmbNmjFu/AQ+/+xTxiSV09zhNjpSUNAa/nswkvi4WCZMmGB0HK8InOXEhNdUVVWxfPly/jV/PulpaRDWiPK2Q3HFta1XU1edmK04E1KoatoZW+Y2Pv7kEz797DNGjhjBlClTaNOmTcMcV3jNddddx5LFX/LB/gju7VFsdJygsDHHxv4iMw899Hvs9uC4yFSKSgjJzs7m888/5/MvvqCosBDtiKOi7VBcsW3A5Ju2cm2LoLL1QJwtLsR2bAdfLfuaJUuW0LNnTyZPnsygQYMCaunUUBIfH89vr7uet99+m+15VnrEy+CL81Hugg8PRtHugraMHh08l9jJ/94g53Q6WbduHYsXL2bjxo1owBWdgLNDP6obtWq4M5NfoO2RVCb3x9myJ9bje9m2Zx/bnniCmNg4xowexejRo0lOTjYkmzi7q666iiWLv2TOviM81y8fe2CMMvZLHx10kF8BT93/QMBOyXImUlSCkNvtZteuXSxbtoylS5dRWloC9ggqm3enqkkntD3S6IinaGsYzhYX4mzeHXPRUVy5e5j/wQfMnz+fjh07MXr0KIYNG0ZsrMzA4w9sNhsPPvQH7r77bv5zwMFvO5QZHSkg7Su0sDQjnEmTJ9O1a1ej43iVFJUgobVm3759rFixgmXLl3M8NxdlsuCMSaKq1UCqG7U4p2tNfE6ZqI5JpDwmEVVVjiXvAHuO7Gfv3/7Ga6+9Rq9evRk+/BIGDx5Mo0aNjE4b0nr06MEVV1zBRx99xIXxVXSXZrBzUu5SvLmnEc2bN2PatGlGx/E6KSoB7OQZyerVq1m5chU5OdmgTLgataKqzRBcsUlgDrwhitoaTlXzblQ174aprABL/kG+25XKd99t4eVXXqFXz54MHTqUQYMGERcXZ3TckDRt2jQ2f7uJt/cc4em++UTb/HvYrr/QGubsjSCv3MRrLz6Kw+EwOpLXSVEJME6nk23btrFmzRpWf7OGwoJ8MJlwRbXE1XoQVbHJZ5xFOFC5HbE4HX1wtuqNqfQ4loLDbNm1ny1btvDqq6/StVs3Bg8axMCBA0lISDA6bsiw2+089vgT3HbrrczY1Yg/XFiEKbAvBPeJlZl21mXb+d3vbqJbt25Gx2kQUlQCQHFxMRs3bmTNmjVs2LCRiopylNmKs1FLXG2744pOBEvgnZGcE6VwRzbBGdkEZ0IKpvICLAWH+eHgEXb8MIMZM2aQlJzMkMGDGThwIB07dsTkoxFtoeqCCy7gnnvv5aWXXuKTQ+Fc0bbc6Eh+7XCxmXn7I0np05trr73W6DgNRoqKn8rMzGTt2rWsXbuW7du343a7UTYHldGJuBKTa/pITCH661MKtyMOpyMOZ6veqMpiLAXpHCpIJ/2f/2TevHnExMQycOAABg4cSJ8+fYLmGgB/M3bsWH744Qc+W7yYto1c9Gos/StnUlyleG1HNDGx8fz50ceCarTXT4Xop5L/cbvd7N69m3Xr1vHNmjU1FyUC2hGHs1k3XDFJuCOaGDYE2J9pexRVzbtS1bwruCqxFGVQVZDOoiVLWbhwIVabjb4pKQwaNIj+/ftLP4wXKaW47777OLB/PzN37+eJPgW0kKvtf6TaDTN2RlFUZeH1Z54lJibG6EgNSoqKgZxOJ1u3buWbb77hmzVrKCosBKWojmpOVeJFuGIS0WEy0umcWOy44i/AFX8BFe5qzMXHsBSms27LdtatW4dSik6dOzN0yBAGDRok/TBeYLfbefqZZ5g29fe8tsPNY70LCJdPllP+e9DBjnwrf/jDA3Tq1MnoOA1OfvU+VlFRwcaNG1m1ahXr1m+gorzM0z/SClfbC3FFJwRVR7uhTGaqo1tRHd2KSt0fU3k+loJ0dqWls3vmTGbOnEly69YMHTKEYcOG0aZNm4CfdtwozZs354knn+LBBx7gnd1R3NmtWE6qgU05NhamhzNx4kTGjh1rdByfkKLiA5WVlWzatIkVK1awdu06KisrUNYwKqOTcCWEeP+IryiF2xGP0xGPs1WvU/0wB/PSSHv/febOnUtCYhLDL7mYiy++mNatWxudOOD07t2babfcwsyZM1lyJIzRSRVGRzJUVqmJd/ZE0blTR+68806j4/iMfJI1EK01u3btYsmSJSxbvpyy0lKUNZzKmGRccW2ojmru3xcjBrna/TCqqhxLwWHS8g8xZ84c5syZQ7v27Rk7ZgzDhw8nOjra6LgB49e//jU7d+7kgzXf0C7aRbtol9GRDOGshtd3RmN3RPHkU08HxZT2dSVFxctKS0tZvHgxn3z6KRlHjqDMFpwxyVS1auf/V7WHKG0Np6ppZ6qadkY5y7DkHyI1cz+vvfYab7zxBoMHD+aKK66gW7du0jz2C5RSTJ8+nd/v28uMXZqnUgqIsIbehZHz90eQUWLihRf+HHLLO0hR8ZKcnBw+/PBDFi5aREV5ec01Fa0HURXXOiCvag9V2uY4dQZjKsvDenw/q9asZ+XKlbRr355fX301l1xySVAPCT1fkZGRPPrY49x11128vy+CW7uWGB3Jp74/bmX50TCuvvpqLrroIqPj+JwUlfNUWFjIv/71Lz7++BNc1dVUxbbB2boL7sgmRkcT58ntiKcyKZ7KVr2x5h0gNWMXzz77LO/Pm8fU3/+eQYMGyZnLWXTt2pXrrruOOXPmcFGzypC5fqXMpZi9rxGtk5P4/e9/b3QcQ0hROQ8rV67kpb+8TGlpCVXx7ahs2cuvZgAWXmK2UtW0E1VNOmIpOER65lYeffRR+vbrx8PTpxMfH290Qr/029/+lm9WreK9fYfpHJNHWAh82vz7gIOiSsXzj/wxpPpRaqtTA79S6p66bAsV1dXVvPjiizzxxBMUE0Zp18lUtBkcMgXFnr4Bc1ke5rI8wvcswp6+wehIvqEUrri2FHe9jIqki9i85TtuuPFGtm3bZnQyv2S1WrnvgQcoqIDP08KNjtPg0ovNrMgM47LLLw+J61HOpq69xjecYduNXswRMLTWvPjiiyxatIjKFj0o7TQOd3horfVhKstHVVehqquwFB/DVJZvdCTfUiaqmnWluPMkil1mpk9/mB07dhidyi91796dkSNH8uURB3kVwT1IZf6BCKIiI7nxxhuNjmKon/0tK6WuUUp9DrRRSi2o9bUCyPNNRP+yevVqlixZQmXLnjgTUmQ0VwjT4dGUdhxNpbLx7HPP43KF5vDZX3LzzTeDMgf12cqeAgs7861cd/0NREVFGR3HUL/0ibgOeBnY4/l+8usBIHgWVT4HH/773xAejbNlT6OjCD+grQ7KE/qSlXmU9evXGx3HLzVv3pxx48ezKjOM/CA9W/k0LYK42BgmTpxodBTD/exvWGudprVeqbX+ldZ6Va2v77TWIflnWWZmFs6IZnKGIk5xRTUHICsry+Ak/mvKlCloFMuOhhkdxevSi83syrdw1dW/ltmwqXtH/eVKqVSlVJFS6oRSqlgpdaKhw/mjmJgYzJXFRscQfsTkeT8E++yz56NFixYMGjyYFZnhOKuNTuNdX2WEYbfbGD9+vNFR/EJd/9x+EZiotY7WWjfSWkdprUNy+tyhQwZjLj6GqSTX6CjCT9iO/YDFYqFfv35GR/FrkydPprQKNucGz1DbcpdiY04YI0aMDPm+lJPqWlSytda7GzRJgLj66quJi48j4vA34Ko0Oo4wmOV4Ktb8Q1x33XVypvILevbsScsWzVmVFTwd9huybVRWI2cptdS1qGxWSn3oGQ12+cmvBk3mpyIiInjs0UcxV5UQkbpUCksIsxSkEX54LT179eI3v/mN0XH8nslkYtToMewusHC8ATvskyJdhJvdhJvddIqpIimy4bp/12aHkZyYENLXpfxUXX+zjYAy4FJggufrvEqzUsqslNqqlPrCc7+NUmqjp+/mQ6WUzbPd7rm/3/N461qv8Yhn+16l1KjzyXMuevbsyeOPPYa1PI/IvV+inKW+OrTwE9bcvYQf+JoOHdrz7DPPYLVajY4UEEaOHAnA+mMN1wT22w5lJEdVkxxVzR97n+C3Hcoa5Di55Sb2FVq4dPQYma7yEkVbAAAdJUlEQVSnlroWFRNwn9b6Jq31TcD9Xjj2PUDtJrUXgFe11u2BAuBmz/abgQKtdTvgVc9+KKW6AFOArtQMb/6HUspns/wNGTKEF154gXBdTtTuBZhPyMifkOCuxn54HWGH19K3b1/++uqrREREGJ0qYLRs2ZKuXbqwISfwm8A2ZNcUxuHDhxucxL/Utaj00FoXnryjtS4AetX3oEqpBGAc8I7nvgIuAf7r2WUOMNlze5LnPp7Hh3v2nwR8oLWu1FofAvYDPu0pTUlJ4c2ZM2nVrDGOfYuxHd0KWtbnDlaqvIiIPQux5e7hmmuu4fnnnsPhcBgdK+CMGDmSIyUmMkoCe6bn9TnhdO3ahebNmxsdxa/U+UxFKXVqLhKlVBznNxnlX4E/ACc/geOBwlrXvmQArTy3WwFHADyPF3n2P7X9DM/xmeTkZN56801GDB+OPXMrEXsWoSqKfB1DNCStsebsIWr3AqJUJU8//TS33HILFksIzJDYAIYNG4bJZGJ9duCOAjtSYiajxMTIkZcaHcXv1LWovAysU0o9rZR6ipor7V+szwGVUuOBHK31ltqbz7Cr/oXHfu45Pz3mNKXUZqXU5txc7w8Fdjgc/PnPf+bPf/4zkbqUqF2fYT22Q85agoCqLMaxbzFhaevo1bMHc957l8GDBxsdK6DFxsbSp09vNuSEowN0/a51x+yYTCaGDRtmdBS/U6eiorWeC1wBZAO5wOVa6/frecyBwESl1GHgA2qavf4KxCilTv7plwBkem5nAIkAnsejgfza28/wnJ/mf0trnaK1TmnSpOHWORkxYgRz58zhor4phB3ZRMSehaE32WKw0G6sx34gauenRDgLefDBB3n5L3+hcePGRicLCiNHXkpuuSK1KPDO9twaNuSG0zclRYaRn0Gdx/VprXdprf+utX5da72rvgfUWj+itU7QWrempqP9a631tcAK4ErPbjcAn3luL+B/syRf6dlfe7ZP8YwOawO0BzbVN5e3NG7cmOeff55HH32UaJOTiF0LsB35FqpDY5GiYGAqySVy9+eEHfmWi/r2Ye7cOYwfP15G+HjRoEGDsNttrD0WeNOa7Cu0kFde0zckTudPE1hNB+5XSu2nps9klmf7LCDes/1+4GEArfVO4N/ALmAxcIfW2i8mgFBKMXz4cOa9P5cxo0dhP/YDUTs/wVKQRsCe79dW7SQsLIwrr7ySsLAwqHYancg7XJXY09YRsftzYm2aJ554gueffz7k1hj3BYfDwZAhQ9mYGxZw07Z8c8xOeJhdmkHPwtBzT631SmCl5/ZBzjB6S2tdAVx1luc/CzzbcAnPT3R0NNOnT2fMmDH85eWXSd+/HFd0AhVJ/dFhgTvLjXI5GT9xPHfeeSdaa/79+RKjI50frbHk7cdxdDNUVXDZ5Zdz8803y1DhBjZq1CiWLl3K1uM2LmoWGH+YVFbDt7lhXDzykpo/qMRpAq9BMwD16NGD2bNm8fHHHzNr9mysOz+honl3nM17gDnwfgXaYuOLL75Aa83ChQvRlsAdVmsqPU54+gZMJTl06tKF+++7j/bt2xsdKyT06tWLJo3jWZ1VFTBFZVOOnQoXjBkzxugofsufmr+CmsVi4eqrr+af8+Zx8bCh2DO3EbUrQJvEzDYqKir46KOPqKioAHMADg11VWJPW0/E7s+JNlUyffp03vj736Wg+JDZbGbM2HHsyLc26LQt3rQqK4xWLVvQvXt3o6P4rcD4TQaRxo0b89hjj/Hqq6+S1CyO8P3LCU9diqoIyZUEfE9rLMdTabTzY+y5e7hs8mT+9c95jBkzBpNJ/jv42pgxY0DB6kz/77A/WmpmX6GFceMnyKCNnyH/iwzSq1cvZs+axR133EGkM4+onZ/UXJHvDsm1z3zCVJZPxN5FhB/6hs7t2vLWW29xzz33yJTlBmrRogUpKSmsPubA7ecn7Ksy7ZjNJkaPDslFb+tMioqBLBYLV111FfPef59hQ4diz9xK1C6ZR8zr3C5sRzYTsWsB0ZQzffp0/v7316Wpy09MmDCR/Ar4Ps9/J+V0VsOa7HAGDRpEXFyc0XH8mhQVP9C4cWMef/wxXnrpJZpFh+HY+yX2w2uDZ6iugcwnsoja+Sn2Y9sZM3oU8+a9L01dfmbAgAHEx8bw9VH/nWTy21wbJc6aAih+nvzP8iN9+/ZlznvvMWXKFOzH9xG181PMJ844SYD4JW4X9rQNOPZ+SfPYCF599VWmT59OdHS00cnET1gsFsZNmMj2PCu55f75kfT1UQetWrakd+/eRkfxe/75GwxhYWFh3HrrrbzxxhskNI3FsXcx9iObwB1gV4gZyFSWT+Tuz7Hl7OKKK67g3dmz6dWr3pNqCx84OWPBikz/u/YjvcRMapGZSZMnyxluHci/kJ/q0qUL77z9NhMnTsR2bAcRe79EORtmsaFgYjm+n8jdXxBrh5deeom77rqL8HD/bVYRNZo2bcqvBvyK1cfCqfKzeVi/PhqGzWqVDvo6kqLix8LCwrj//vt5/PHHCa86QdTuBZjK8oyO5Z+0xnbkW8IPraZ7t668O3s2ffv2NTqVOAeTJk3mRCVszvGf657KXYp12eFcMnw4jRoF7iwYviRFJQBcfPHFzJjxD+KiHETu/RJzcbbRkfyL1tgPr8F+7AcmTJjAK6+8TGxs7C8+TfiXlJQUWrZozteZ/nNmue6YjQqXZtKkSUZHCRhSVAJE27ZtmTHjH7Ro1oSI/cvkjOUkrbGnb8B2PJXrr7+e+++/XxbPClAmk4mJkyazt9DiF6tCag1fZzlo1+4COnXqZHScgCFFJYA0bdqUV195hbjoKCL2LwdXpdGRDGc9vg9bzm6uvvpqbrrpJrnSOcCNHj0aq8XMSj+4wn7/CQtHik1MmjRZ3lfnQIpKgGnWrBnPPPM0pqpywtI3GB3HUKqymPAjG+nduze33nqr/McPAjExMQweMpQ12eGGT4m/MtNOmN3O8OHDjQ0SYKSoBKDOnTszZcqvseYdCOlmMPvRrVhMiocffliGegaRcePGUVYFm3ON67Avdyk25YQxfMQIHI7AnYXbCPI/MUBdc801WK1WrLmpRkcxRrUTa8Ehxo0bJ4toBZlevXrRollTVh8zrsN+Y46NymoYO3asYRkClRSVABUVFUWfPinYio8aHcUQ5uJj4K5m2LBhRkcRXmYymRg1Ziy78y2GTYm/5lgYSYkJdOnSxZDjBzIpKgGsTZvWUFEceOuxeIGpshiA1q1bGxtENIhRo0ahgXUGrGGfU25iX6GFUaPHSD9dPUhRCWAh/Yb31NGQ/jcIYi1atKBH926syw73+d9M647ZUQpGjhzp2wMHCSkqAezo0aNgj4AQ/GDVtprO08xMmXAzWI28dBSZpYo0H16zojWszwmnR48e0ldXT1JUApTL5eK7rduocjQxOoohqiObAbB582aDk4iGMmTIECxmM+uzfdcEllZiJqtUMXLkpT47ZrCRohKg1q1bR/GJIqri2xodxRDa5qA6qjkLFy2iulpmcA5G0dHR9O3bl4054T5bFXJ9ds3qjkOGDPHNAYOQFJUA5Ha7efe99yA8muroBKPjGMbZtAvHsrJYvny50VFEAxk+YgT5FZBa1PBT77g1bMwJp1/ffjJ55HmQohKAFi5cyKGDBylv0RNU6P4KXbHJ6IjGzJj5JmVlsixAMBowYAB2m9UnTWCpRRbyK+ASuYL+vITuJ1KAysnJYcbMmVRHNccVF5pNX6coRVlSfwry85g5c6bRaUQDcDgcDBg4iG9zw3A18Dor67Pt2G1WBg4c2LAHCnJSVAKI2+3m+ef/j/IKJ+WtB4XkqK+fckc2xdmsGwsWLGD9+vVGxxENYMSIERQ7YWe+tcGO4XLDptwwBgwcJNOynCcpKgFk/vz5bN36HeWJ/dBh0uZ7UmVCb7Qjjueef57jx48bHUd4Wb9+/YiKjGBtA14IuT3PSokTLr1URn2dL58XFaVUolJqhVJqt1Jqp1LqHs/2OKXUUqVUqud7rGe7Ukq9ppTar5TarpTqXeu1bvDsn6qUusHXP4sv7dy5k1mzZlEV24aqxh2MjuNfTBbK2g6jpLScZ555RkaDBRmr1colw0ewJc9Omathzs7XHrMT0yhKVgv1AiPOVFzAA1rrzkB/4A6lVBfgYWC51ro9sNxzH2AM0N7zNQ2YATVFCHgcuAjoBzx+shAFm5KSEp588inctkgqWg+UZq8zcIfHUJZ4Edu2bWP+/PlGxxFeNmrUKKqqYVMDLDVcXKXYmmdnxKWjZIE3L/B5UdFaZ2mtv/PcLgZ2A62AScAcz25zgMme25OAubrGBiBGKdUCGAUs1Vrna60LgKXAaB/+KD7z97//nZzcHErbDAGL/6zf7W9cjdtTFdeG2bPfJTU1RGdvDlKdO3cmKTGB1Vnen7l4/TE7LnfNAmHi/Bnap6KUag30AjYCzbTWWVBTeICTcyS0Ao7UelqGZ9vZtgeVLVu2sHjxYiqbd8cdKdNG/CylqEgegLbYefHFF6UZLIgopRg7bjz7i8wcLfXetC1aw6pj4XRo34527dp57XVDmWFFRSkVCXwE3Ku1PvFzu55hm/6Z7Wc61jSl1Gal1Obc3NxzD2sQt9vN3994A8Ia4WzZ0+g4p7gdcWizFW224opqjtsRZ3Sk/7HYKUvoS2pqqlwUGWRGjRqF2Wzy6lLDh4rNHCk2MW78BK+9ZqgzpKgopazUFJR/aq0/9mzO9jRr4fme49meASTWenoCkPkz20+jtX5La52itU5p0iRw5sr69ttv/3eRo8l/2nork/pT7Yin2hFPeaexVCb1NzrSj7ji2qIj4pn3z3+iQ3BZgGAVGxvLoEGDWevFpYZXHA3DbrfJksFeZMToLwXMAnZrrV+p9dAC4OQIrhuAz2ptv94zCqw/UORpHlsCXKqUivV00F/q2RY0li1bhrLaccW1MTpKYFGKysYdSU9L4+DBg0anEV40YcIESpzeWWq43AUbcsO4+OJLiIyM9EI6AcacqQwErgMuUUpt83yNBf4PGKmUSgVGeu4DLAIOAvuBt4HbAbTW+cDTwLeer6c824LGrt17cEY0B5Pvpv4OFq5GLQHYs2ePwUmEN/Xu3ZsWzZqyygsd9huy7VS6agqV8B6ft6lorddw5v4QgNPOQXVN+8UdZ3mt2cBs76XzL4WFBWhH6E4YeT5OrrdSWFhocBLhTSaTifETJ/H222+TVWaihaP+c7eszAqnbevWsmSwl8kV9X6sUaNolLPc6BgBSTlrJpiMiooyOInwttGjR2MymVidGVbv10grNnPohJnxEyfK6qFeJkXFj/Xp3QtbSRZUVxkdJeBYCtMB6NWrl8FJhLfFx8fTv39/1maHU13PE5XVWXasVgsjRozwbjghRcWfjR07Fu1yYsvabnSUwFLtJDz7B7p260ZiYuIv7y8CzpgxYyishB31mGTS5a5ZMnjgwEGybkoDkKLix7p06cKIESOwH9uO+YSsxV4nWhN+cDXKVcldd95pdBrRQPr37090oyjW1GOSye89k0fKFfQNQ4qKn7vvvvtITEgk4sAKTCU5v/yEUKY19rR1WArTuf322+nUqZPRiUQDsVqtXHzJcLbm2Sl3ndtz12fXTB6ZkpLSMOFCnBQVPxcREcFLL71I08axRO5bgrkow+hI/sntIuzgKmy5e/nNb37DFVdcYXQi0cAuueQSnNWw9Xjdr1mpcMG2PDvDLhkuk0c2ECkqAaB58+b8/fXXSU5KxLHvK2xZ39dMWiQAUJUlROxZhDX/IFOnTmXq1KkyoicEdOvWjfi42HO6EHJ7vg1nNQwdOrQBk4U2KSoBokmTJsz4xxsMGzYMe8YWHPuWnBo2G8oseQeI2vUZDncpzz77LNdee60UlBBhMpkYPGQo2/PtVNZx2pbNOTZiGkXRo0ePhg0XwqSoBJDw8HAef/xxHnzwQcIr8oja9QmW46khedaiqsoJ2/814QdX0blDO96dPVvWFg9BgwYNwlkNuwp+eRSYyw3bC+z8auAgzGaZpaKhSFEJMEopxo8fz6xZ79ClQ3vCD32DI/UrVMXPTfQcRLTGkruPqJ2fEF58lKlTp/Laa3+jRYsWRicTBujRowfhYXa21aFfZX+RhbKqmpFjouFIUQlQiYmJvP76a9x9991EOPOJ2vkptsxt4A7eNURM5QVE7P2S8MNr6NKhHbNmvcO1114rHa4hzGaz0at3H3YU2H/xhP2HfCsmk4k+ffr4JlyIkqISwEwmE5dffjnvz53L4EEDsR/9jqhdnwbfCLFqJ/b0jUTs/JQoXcpDDz3E66+/RnJystHJhB/o168fueWKnPKf/zjbUWCna5cuMiNxA5M/8YJAkyZNeOqpJ/n222959a9/JXPfV7hik6hIvAhtD+C5r7TGkneA8KOboaqccWPHMnXqVGJiYoxOJvzIyal4dhVYaeaoPOM+pVWKw8VmrpezlAYnZypBpG/fvrz37rtMnToVR2k2UTs+wXZ0K7jP8eowP2AqyyNi7yLCD62mQ5tEZvzjHzz00ENSUMRpkpKSiI+NYXfh2Tvr9xZa0FrmgvMFKSpBxmazce211zJv3vsMHTIIe+ZWonZ+gtkzwaLfc1ViT9tAxK4FRKtyHnzwQWbOmEHnzp2NTib8lFKK7hf2ZG/R2ftV9hZZsVrM8j7yASkqQapp06Y88cQTvPLKKyQ2icWRuozw1GWoymKjo52Z1liO76fRzo+x5+5m0sSJ/HPePMaPH4/JJG9T8fN69OhBQQUcrzjze2VfkZWOHTtht3tvfXtxZvK/Ncj17t2bd9+dza233kpEeQ5ROz+pmfXYXf/FjbxNlRfh2LfY09SVzJtvvsl9990nM8iKOuvWrRtQM2z4p6rckFZsoVv37r6OFZKkqIQAi8XClClTeP/9uQz8VX/sGZuJ3L3A+Akq3dXYjm4lctenRFWf4P7772fGjH/QoUMHY3OJgNO2bVvsdhsHTpxeVNKLLbjcyAqPPiJFJYQ0bdqUZ555hmeffZbG4SYi9izEnr4Rqn3fkW8qySVy9+fYM7dy8dChzHv/fSZOnChNXaJeLBYL7du351Dx6Z31B4trCo3MWu0bMqQ4BA0cOJCePXvy5ptvsmDBAmwnMihtPRh3ZNOGP7i7GlvmNuzHthMXF8eDf36OAQMGNPxxRdDr1KkzC3bvPG01yEMnzMTGRNOkSRNjgoUY+bMwREVERHD//ffz8ssvEx9hI2LPQmxHvwPdcH0tqqKIyD0LsWd9z6hLL2XunDlSUITXtG/fHmc1HCv/8bxeaaU2OnTsKBON+ogUlRDXp08f5rz3LiNHjMCeuY2IvV+inKVeP47l+H6idn1GpKrk6aef5pFHHpErm4VXtW/fHoC04v8VFZcbMktMXHBBO6NihRwpKoLIyEj+9Kc/8cc//pFwZxFRuxdgPpHlnRd3V2M/vI7wQ6vp3rUr7707m8GDB3vntYWoJTExEbPZxNHS/xWVzDIz1RouuOACA5OFFikq4pRLL72Ut956k1bNGuPYtxhrzp7zej1VVUHEviXYcvdwzTXX8MorL0u7tmgwVquVxIQEMkotJEW6SIp0kVFSU2DatGljcLrQIUVF/EhycjJvzpxJv759CUtbh+3I5jOu1+J2xOF2xJ31dVRlMZF7F2Irz+PRRx/llltukdmERYNLbt2GrHIbv+1Qxm87lJFVZsakFAkJCUZHCxlSVMRpIiIieP7555kwYQL2Y9uxp60/rbBUJvWnMunM61Ko8iIi9y4iwlTN3/72V4YPH+6L2EKQlJREdllNXwpAVpmZFs2bYbPVfclhcX6kqIgzMpvN3H///VxzzTXYcvdgP7KpTitMqspiIlOXEGW38Prrr9G1a1cfpBWiRkJCAlpDrmca/OxyKwlJskSCL0lREWellGLatGlcccUV2LJ3Ys3e9fNPcDmJSF2Kw6L566uv0LZtW98EFcKjVatWAGSXm9EacirMtGzZ0uBUoSXgi4pSarRSaq9Sar9S6mGj8wQbpRR33HEHgwYNIixj09lHhWlN+KHVmCuLefaZZ2S0jTDEyWWlj1eYKHUpyqu0LDXtYwFdVJRSZuANYAzQBbhGKSUT/HiZyWTij3/8Iy1btsRxeDW4Tl8IyZq7F0thOrfddqusWSEMExsbi9Vq4XiF+dSMxc2aNTM4VWgJ6KIC9AP2a60Paq2dwAfAJIMzBSWHw8Fjjz4KzjLsmVt/9JiqKif86BZ69urFFVdcYVBCIWr+AGoSH09+hYl8KSqGCPSi0go4Uut+hmfbjyilpimlNiulNufm5vosXLDp1KkTE8aPx5az+0frstiytqPcVdx3770yIaQwXJNmzcmvNJNfWfNelGujfCvQPwHONJnPaUOUtNZvaa1TtNYp8gY7P9dddx1msxnbsR01G1yV2I/vZeTIkSQnyygbYbzGjRtTWGWhsNKESSlZgtrHAr2oZACJte4nAJkGZQkJTZs2ZdjQodjzD4LbhTXvALraxZVXXml0NCEAiI+Pp7ASCp0mYmKiMZvNv/wk4TWBXlS+BdorpdoopWzAFGCBwZmC3qhRo9CuSswnsrAWHCa5detTk/kJYbSYmBic1ZBbbiYu7uyzPoiGEdBFRWvtAu4ElgC7gX9rrXcamyr49ezZE5vNjqXgMOaSbAbK9PXCj8TGxgKQUWomJlaKiq8F/GRMWutFwCKjc4QSm81G586d+f77bQB0l7W/hR+Jjo4GoLjKJP0pBgjoMxVhnA4d/tfcJU1fwp+cLCo/vS18Q4qKqJfas77Gx8cbmESIH4uKijrjbeEbUlREvZxcnyIpKVmWaRV+RYqKsQK+T0UYo0ePHsybN0/arIXfiYiIOONt4RtSVES9ycJHwh/VXjtFiorvSfOXECJohYeHGx0h5EhREUIELSkqvidFRQgRtKSo+J4UFSFE0JK16X1PiooQImjZ7XajI4QcKSpCiKBltVqNjhBypKgIIYKWNH/5nhQVIUTQsljkUjxfk6IihAhaUlR8T4qKECLoXHzxxQCYTPIR52tK69OWdA9qKSkpevPmzUbHEEI0IJfLRWlpqUx97yVKqS1a65S67CtlXAgRdCwWixQUg0hREUII4TVSVIQQQniNFBUhhBBeI0VFCCGE10hREUII4TVSVIQQQniNFBUhhBBeE3IXPyqlcoE0o3MEicbAcaNDCHEW8v70nmStdZO67BhyRUV4j1Jqc12vshXC1+T9aQxp/hJCCOE1UlSEEEJ4jRQVcT7eMjqAED9D3p8GkD4VIYQQXiNnKkIIIbxGioqoF6XUaKXUXqXUfqXUw0bnEeIkpdRspVSOUmqH0VlCkRQVcc6UUmbgDWAM0AW4RinVxdhUQpzyHjDa6BChSoqKqI9+wH6t9UGttRP4AJhkcCYhANBarwbyjc4RqqSoiPpoBRypdT/Ds00IEeKkqIj6UGfYJsMIhRBSVES9ZACJte4nAJkGZRFC+BEpKqI+vgXaK6XaKKVswBRggcGZhBB+QIqKOGdaaxdwJ7AE2A38W2u909hUQtRQSs0H1gMdlVIZSqmbjc4USuSKeiGEEF4jZypCCCG8RoqKEEIIr5GiIoQQwmukqAghhPAaKSpCCCG8RoqKEEIIr5GiIoQf8swELUTAsRgdQIhQpJR6Gjiutf6b5/6zQDZwGZAF9KRmWQEhAopc/CiEAZRSrYGPtda9lVImIBX4AzAX6Ka1PmRgPCHqTc5UhDCA1vqwUipPKdULaAZsBfKATVJQRCCToiKEcd4BbgSaA7M920oNSyOEF0hHvRDG+YSaZW/7UjM5pxABT85UhDCI1tqplFoBFGqtq5U609pnQgQW6agXwiCeDvrvgKu01qlG5xHCG6T5SwgDKKW6APuB5VJQRDCRMxUhhBBeI2cqQgghvEaKihBCCK+RoiKEEMJrpKgIIYTwGikqQgghvEaKihBCCK/5f92lC7hRFo/GAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sn.violinplot(data=train[['yr','cnt']],x=\"yr\",y=\"cnt\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2011年和2012年的分布差异很大"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 一年中每天的骑车量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#import datetime\n",
    "\n",
    "#train['date'] = pd.to_datetime(train['dteday'])\n",
    "#train['dayofyear'] = train[\"date\"].dt.dayofyear  #减今年的第几天\n",
    "\n",
    "#fig,ax = plt.subplots()\n",
    "#sn.pointplot(data=train[['dayofyear',\n",
    "#                          'cnt',\n",
    "#                           'yr']],\n",
    "#            x='dayofyear',y='cnt',\n",
    "#           hue='yr',ax=ax)\n",
    "#ax.set(title=\"dayly distribution of counts\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "相邻天的骑车数目好像不是特别连续，可以不考虑增加时序特征（y_(t-1) - y_(t-2)...），点与点之间没有特别的联系"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 季节与骑车数量的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0.5,1,'Seasonly distribution of counts')]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig,ax = plt.subplots()\n",
    "sn.barplot(data=train[['season',\n",
    "                       'cnt']],\n",
    "           x=\"season\",y=\"cnt\")\n",
    "ax.set(title=\"Seasonly distribution of counts\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 月份与骑车数量的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0.5,1,'Monthly distribution of counts')]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig,ax = plt.subplots()\n",
    "sn.barplot(data=train[['mnth',\n",
    "                       'cnt']],\n",
    "           x=\"mnth\",y=\"cnt\")\n",
    "ax.set(title=\"Monthly distribution of counts\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 天气和骑车数目的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0.5,1,'weathersit distribution of counts')]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig,ax = plt.subplots()\n",
    "sn.barplot(data=train[['weathersit',\n",
    "                       'cnt']],\n",
    "           x=\"weathersit\",y=\"cnt\")\n",
    "ax.set(title=\"weathersit distribution of counts\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 工作日和节假日的分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f5b97cea890>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEKCAYAAAAFJbKyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3XucVVX9//HXhxkucpOrOoEIJooigjKJBiFK3MzCMM1bMEhSpKT1VdTiG4nV1+zb16zMxCTwknhJkx8ShhckSEkQFBATVIRRBlEYHEBkZvj8/thr8DDM7czMuc28n4/HPM4566y99+cMe/ictfbaa5m7IyIiUlNNUh2AiIhkFiUOERGJixKHiIjERYlDRETiosQhIiJxUeIQEZG4KHGIiEhclDhERCQuShwiIhKX7FQHkAidOnXy7t27pzoMacBWrFjxobt3TvZxdW5LItX0vG6QiaN79+4sX7481WFIA2Zm76biuDq3JZFqel6rq0pEROKixCEiInFR4hARkbg0yGscDVlxcTH5+fns3bs31aFUqUWLFnTt2pWmTZumOhQRqWdKHBkmPz+fNm3a0L17d8ws1eFUyN356KOPyM/Pp0ePHqkOJ1GyzOwx4GTAgSuA/wAPA92BjcBF7r7Don+oO4BzgT1Anru/AmBm44CpYZ8/c/fZyfwQIrWhrqoMs3fvXjp27Ji2SQPAzOjYsWPat4rq6Ghggbv3AvoC64AbgWfdvSfwbHgNMAroGX4mAncBmFkHYBowADgdmGZm7ZP5IURqQ4kjA6Vz0iiTCTHW1scffwzQBrgXwN33uXshMBooazHMBs4Pz0cD93nkJaCdmeUAI4CF7r7d3XcAC4GRyfskIrWTsMRhZieY2aqYn4/N7Foz62BmC81sfXhsH+qbmf3WzDaY2WtmdlrMvsaF+utD014kZd5++22AEuDPZrbSzP5kZq2AI919C0B4PCJs0gXYHLOL/FBWWblIWkvYNQ53/w/QD8DMsoD3gCf4rDl/q5ndGF7fwMHN+QFEzfkBMc35XKK+5BVmNjd8Q5NGasqUKRQUFHDUUUdx2223JfXYJSUlAC2Bu9x9mZndwWfdUhWpqPnlVZQfvLHZRKIuLrp16xZ3vJJZUnlu11SyuqqGAm+5+7uoOS/1oKCggPfee4+CgoKkH7tr164A+9x9WSh6DDgN2BrOWcLjB+H9fKJrIgd2AbxfRflB3H2Gu+e6e27nzkmf5USSLJXndk0lK3FcDDwUniekOW9mE81suZkt37ZtWz2Hn752797NV77yFfr27cvJJ5/Mww8/zIoVKzjrrLPo378/I0aMYMuWLQDcc889fOELX6Bv375ccMEF7NmzB4BHH32Uk08+mb59+zJ48GAgugg/fvx4+vTpw6mnnsrzzz8PwKxZsxgzZgwjR46kZ8+eTJkyJTUfPIWOOuoogH1mdkIoGgq8DswFyrpSxwFPhudzgbGhO/YMYGc4958GhptZ+9BlOzyUiaS1hA/HNbNmwNeAm6qrWkFZjZvz7j4DmAGQm5t7yPsN1YIFC/jc5z7HU089BcDOnTsZNWoUTz75JJ07d+bhhx/mxz/+MTNnzmTMmDFceeWVAEydOpV7772XyZMnM336dJ5++mm6dOlCYWEhAHfeeScAq1ev5o033mD48OG8+eabAKxatYqVK1fSvHlzTjjhBCZPnszRRx9dQXQN2ibgwXB+vw2MJ/oi9oiZTQjvXxjqzicairuBaDjueAB3325mtwAvh3rT3X178j6CSO0k4z6OUcAr7r41vN5qZjnuviWO5vyQcuWLEhpxBunTpw/XXXcdN9xwA+eddx7t27dnzZo1DBs2DIDS0lJycnIAWLNmDVOnTqWwsJBdu3YxYsQIAAYOHEheXh4XXXQRY8aMAWDJkiVMnjwZgF69enHMMcccSBxDhw7l8MMPB+Ckk07i3XffbYyJ4xN3z62gfGj5And34KqKduLuM4GZ9RybSEIlI3FcwmfdVPBZc/5WDm3OX21mc4guju8MyeVp4Bcx49uHU33rpdE4/vjjWbFiBfPnz+emm25i2LBh9O7dmxdffPGQunl5efztb3+jb9++zJo1i0WLFgHwxz/+kWXLlvHUU0/Rr18/Vq1aRfR/XcWaN29+4HlWVlbZxWKRCmXCxV6JT0KvcZhZS2AY8HhM8a3AMDNbH967NZTPJ2rybwDuAb4HUXMeKGvOv4ya8wd5//33admyJZdffjnXXXcdy5YtY9u2bQcSR3FxMWvXrgWgqKiInJwciouLefDBBw/s46233mLAgAFMnz6dTp06sXnzZgYPHnygzptvvsmmTZs44YQTDg1ApBqZcLFX4pPQFoe77wE6liv7CDXn683q1au5/vrradKkCU2bNuWuu+4iOzub73//++zcuZOSkhKuvfZaevfuzS233MKAAQM45phj6NOnD0VFRQBcf/31rF+/Hndn6NCh9O3bl169evHd736XPn36kJ2dzaxZsw5qaYhI46W5qjLciBEjDlyriLV48eJDyiZNmsSkSZMOKX/88ccPKWvRogWzZs06pDwvL4+8vLwDr+fNmxdfwCKS8TTliIiIxEUtDhGRJBv4u4GVvtessBlNaMLmws0V1ls6eWkiQ6sRtThERCQuShwiIhIXdVWJSJV0H4aUp8QhIlUquw9DpIwSR4brf/199bq/Fb8aW22dK664gnnz5nHEEUewZs2aej2+iKQ/XeOQuOXl5bFgwYJUhyEiKaLEIXEbPHgwHTp0SHUYIpIi6qoSkTrL9PsS0om3dPazH2+ZvqtDKHGIiKSR4oHFqQ6hWuqqEhGRuChxiIhIXNRVleFqMny2vl1yySUsWrSIDz/8kK5du3LzzTczYcKEpMchIqmhxCFxe+ihh6qvJCINlrqqREQkLmpxSMpoDiSRzKTEISmjOZCkIWoMX4iUOERE6lFj+EKU0GscZtbOzB4zszfMbJ2ZnWlmHcxsoZmtD4/tQ10zs9+a2QYze83MTovZz7hQf72ZjUtkzCIiUrVEXxy/A1jg7r2AvsA64EbgWXfvCTwbXgOMAnqGn4nAXQBm1gGYBgwATgemlSUbERFJvoR1VZlZW2AwkAfg7vuAfWY2GhgSqs0GFgE3AKOB+9zdgZdCayUn1F3o7tvDfhcCIwGNCQU2Te9Tr/vr9pPV1dbZvHkzY8eOpaCggCZNmjBx4kSuueaaeo1Dkq+yc6lkewcgm5Lt71Z+vrVvm7jAJO0k8hrHscA24M9m1hdYAVwDHOnuWwDcfYuZHRHqdwE2x2yfH8oqK5cUyc7O5te//jWnnXYaRUVF9O/fn2HDhnHSSSelOrRk6mNmq4FSoMTdc0Pr+GGgO7ARuMjdd5iZEbW+zwX2AHnu/gpE3bDA1LDPn7n77OR+jPTWGC4016dk/b4S2VWVDZwG3OXupwK7+axbqiJWQZlXUX7wxmYTzWy5mS3ftm1bbeKVGsrJyeG006JLUG3atOHEE09s8BcDK3G2u/dz99zwWt2wFfCWzv5WtZvttexCc0FBQQIia3iS9ftKZOLIB/LdfVl4/RhRItkauqAIjx/E1D86ZvuuwPtVlB/E3We4e66753bu3LleP4hUbuPGjaxcuZIBAwakOpR0MJqo+5XweH5M+X0eeQko64YdQeiGdfcdQFk3bINSPLCYfcP2ZcSsr1IzCUsc7l4AbDazE0LRUOB1YC5QNjJqHPBkeD4XGBtGV50B7AxdWk8Dw82sffg2NjyUSYrt2rWLCy64gN/85je0bdso+7j/YWYrzGxieH1QNyygblhpkBJ9H8dk4EEzawa8DYwnSlaPmNkEYBNwYag7n6gPeANRP/B4AHffbma3AC+HetPLLpQ3JJnWl1tcXMwFF1zAZZddxpgxY1IdTiq84e6nhWt0C83sjSrq1rkblqiLi27dutUmVpF6ldDE4e6rgNwK3hpaQV0HrqpkPzOBmfUbXXrJpJuG3J0JEyZw4okn8sMf/jDV4aRKMYC7f2BmTxBdo9hqZjlh0EdNu2GHlCtfVP5A7j4DmAGQm5ubvsvCSaOhO8czXE2Gz9a3pUuXcv/999OnTx/69esHwC9+8QvOPffcpMeSCrt374bQzWtmrYi6T6fzWTfsrRzaDXu1mc0huhC+MySXp4FfxFwQHw7clKzPIXXTmIcvK3FI3AYNGkTUQGyctm7dCtDLzF4l+hv6i7svMLOXUTesNAJKHCJxOvbYYwFejxmGC4C7f4S6YaURUOKQtDXwdwMrfa9ZYTOa0ITNhZsrrbd08tJEhSbSqGkhJxERiYtaHEmkb9AiUlcvDD6r0vc+yc4CMz7Jz6+03lmLX6hzDGpxiIhIXJQ4REQkLuqqynBVdX/VRk26w/bu3cvgwYP59NNPKSkp4Rvf+AY333xzvcYhIulLiUPi1rx5c5577jlat25NcXExgwYNYtSoUZxxxhmpDk1EkkBdVRI3M6N169ZANGdVcXEx0ZITItIYqMUhtVJaWkr//v3ZsGEDV111laZVb8A6tdgPlITH+leXUUL1MUKoviX695UOlDikVrKysli1ahWFhYV8/etfZ82aNZx88smpDksS4LpTClMdQkZpDL8vJY404S2d/dRulbRUateuHUOGDGHBggUZkzgybQp7kXSjaxxpIpNWSdu2bRuFhdG3qk8++YRnnnmGXr16pTiqmtNypCJ1oxZHhkvF3eRbtmxh3LhxlJaWsn//fi666CLOO++8pMchIqmhxFGPGksXyCmnnMLKlStTHYaIlNMuLHfQLsHLHihx1KNMWsVPRBqey0uTM5JL1zhERCQuShwiIhKXhCYOM9toZqvNbJWZLQ9lHcxsoZmtD4/tQ7mZ2W/NbIOZvWZmp8XsZ1yov97MxiUyZhERqVoyWhxnu3u/mGU2bwSedfeewLPhNcAooGf4mQjcBVGiAaYBA4DTgWllyUZERJIvFV1Vo4HZ4fls4PyY8vs88hLQzsxygBHAQnff7u47gIXAyGQHLSIikUSPqnLgH2bmwN3uPgM40t23ALj7FjM7ItTtAmyO2TY/lFVWLlQ9z09txDP3T2lpKbm5uXTp0oV58+bVaxwikr4SnTgGuvv7ITksNLM3qqhb0fSqXkX5wRubTSTq4qJbt261ibVGNk3vU+l7Jds7ANmUbH+34nrt2yYsrlS44447OPHEE/n4449THYqIJFFCu6rc/f3w+AHwBNE1iq2hC4rw+EGong8cHbN5V+D9KsrLH2uGu+e6e27nzp3r+6NIOfn5+Tz11FN8+9vfTnUoIpJkCUscZtbKzNqUPQeGA2uAuUDZyKhxwJPh+VxgbBhddQawM3RpPQ0MN7P24aL48FAmKXTttddy22230aSJRnSLNDaJ7Ko6EngiLPCTDfzF3ReY2cvAI2Y2AdgEXBjqzwfOBTYAe4DxAO6+3cxuAV4O9aa7+/YExi3VmDdvHkcccQT9+/dn0aJFVdZV155Iw5OwxOHubwN9Kyj/CBhaQbkDV1Wyr5nAzPqOUWpn6dKlzJ07l/nz57N3714+/vhjLr/8ch544IFUhyYNTLLmXpL4qJ9B4vY///M/5Ofns3HjRubMmcM555zTKJOGma00s3nheQ8zWxZuUn3YzJqF8ubh9YbwfveY7W8K5f8xsxGp+RTp7fLS/VxdUpq0OZikZjTJYYY7a/ELvPPOO+zbt49mzZrRo0ePVIfUWBwJ/BMo60/7JXC7u88xsz8CE4huYp0A7HD348zs4lDvm2Z2EnAx0Bv4HPCMmR3v7qXJ/iAi8VLiyCAvDD6Ltjf/lCI7eITy/vB6/759FL1R8YjnNglaaGnIkCEMGTIkIftOV/n5+QCHA38CfmjRhbxzgEtDldnAT4kSx+jwHOAx4Peh/mhgjrt/CrxjZhuIRh2+mJxPIVJ76qoSidO1114L0TDxsv6TjkChu5eE17E3qR64gTW8vzPUr/GNrWY20cyWm9nybdu21eMnEakdJY561KnFfo48rIROLdQf21CVjSgjGvlXpqqbVOt0YyvoHiVJP+qqqkfXnVKY+IO44+6YVfT/TvrwBjoKpmxEGdAHmEN0jeM3RHOrZYdWRexNqmU3sOabWTZRF9d2anhjq0g6Uosjw5Ru2cLOffvS+j9md+ejjz6iRYsWqQ6l3pWNKANWE13cfs7dLwOeB74RqpW/sbXshtdvhPoeyi8Oo656EM0K/e/kfAqRulGLI8PsefAvbL3sUj7MyYHQ6igyYz/Rt4CPK0koLZKcaFq0aEHXrl3ZktSjptQNwBwz+xmwErg3lN8L3B8ufm8nSja4+1ozewR4HSgBrtKIKskUShwZxnftYvfdMw4q+312FtvN6ODO1SUV/99zahyz3krNuPsiYFF4/jbRqKjydfby2ewI5d/7OfDzxEUokhjqqhIRkbioxdEAaFoGEUkmJY4GQNMxiEgyqatKRETiosQhIiJxUeIQEZG4KHGIiEhclDhERCQuShwiIhIXJQ4REYmLEoeIiMRFiUNEROKS8MRhZllmttLM5oXXPcxsmZmtN7OHzaxZKG8eXm8I73eP2cdNofw/ZjYi0TGLiEjlktHiuAZYF/P6l8Dt7t4T2AFMCOUTgB3ufhxwe6iHmZ1ENBV1b2Ak8Aczy0pC3CIiUoGEJg4z6wp8BfhTeG3AOcBjocps4PzwfHR4TXh/aKg/Gpjj7p+6+zvABiqYvlpERJIj0ZMc/gaYArQJrzsChWF5TYiWz+wSnncBNgO4e4mZ7Qz1uwAvxewzdpsDzGwiMBGgW7du9fspJCO9MPisCss/yc4CMz7Jz6+0zllav0SkUglrcZjZecAH7r4itriCql7Ne1Vt81mB+wx3z3X33M6dO8cdr2QWb+nsb7Ufb6mp5EWSLZEtjoHA18zsXKAF0JaoBdLOzLJDq6Mr8H6onw8cDeSbWTZwONFSm2XlZWK3kUaqeGBxqkMQabRq1OIws2tqUhbL3W9y967u3p3o4vZz7n4Z8DzwjVBtHPBkeD43vCa8/5y7eyi/OIy66gH0BP5dk7hFqrJ+8+ZDyh57770URCKSWWraVTWugrK8Wh7zBuCHZraB6BrGvaH8XqBjKP8hcCOAu68FHgFeBxYAV7l7xQtri8Th3YKCQ8oWbD20TEQOVmVXlZldAlwK9DCzuTFvtQE+qulB3H0RsCg8f5sKRkW5+17gwkq2/znw85oeT6Qqm7Zu5a2tW9m9dy8/WrvmQPme0lLaNm2awshEMkN11zj+BWwBOgG/jikvAl5LVFAiidTx8MMpbt6cd996i4u6dD1Q3jI7i2NbtU5hZCKZocrE4e7vAu8CZyYnHJHEa9WiBe0PO4zP9+9PvxL1eorEq0ajqsxsDNGd3EcQDY81wN29bQJjE0mo97Zt47INGygsLsb5bOz3/C8OTHFkIumtpsNxbwO+6u7rqq0pkiFee+st/tD7ZI5p2TLVoYhklJqOqtqqpCENTYumTWuVNPbu3Qtwopm9amZrzexm0ASe0njUtMWx3MweBv4GfFpW6O6PJyQqkSRo37YtN69bx6COHWna5LPvUIM7dapyu+bNmwP8x91PM7OmwBIz+zvRMPLb3X2Omf2RaOLOu4iZwNPMLibq9v1muQk8Pwc8Y2bHa7i5pLuaJo62wB5geEyZA0ockrGKS0pontWElwt3HCgzqk8c0dyb7A8vm4YfJ5rA89JQPhv4KVHiGB2eQzSB5+/LT+AJvBPuYTodeLFun0zqasqUKRQUFHDUUUdx2223pTqctFPTxNEEuMbdCwHMrD0HD88ViVunFvuBkvCYGlcd+3naZEd/BkXFxfzhnbdrvK2ZrQKOA+4E3iJBE3hK8hUUFPCeZhGoVE0TxyllSQPA3XeY2akJikkaietOKay+UgLt3LXrQNIAaNO0Ket37arx9u7ez8zaAU8AJ1ZUJTzWaQJPzfws6aamF8ebhFYGAGbWgcRPyS6SUO5OUfFnkyV+XFxMqcc32274QrUIOIMwgWd4q6IJPKnNBJ6a+VnSTU3/8/818C8ze4zoG9FFaAoQyXDHd+vGVa+u4qxOnTHg+Q+38a2jq/9Gv23bNoAsADM7DPgy0QXvsgk851DxBJ4vEjOBZ5jG5y9m9n9EF8c1gadkhBolDne/z8yWE138M2CMu7+e0MhEEuyYo47iqsNa8srOQnC45cST6N6qVbXbbdmyBeAEM3uNqNX+iLvPM7PXgTlm9jNgJQdP4Hl/uPi9nWgkFe6+1szKJvAsQRN4SoaocXdTSBRKFtKgdG/VqkbJItYpp5wC8Lq758aWawJPaSwSuua4iIg0PEocIiISF42MEpFGq//191VY3ubDIrKATR8WVVrniTYJDCzNqcUhIiJxUeIQEZG4KHGIiEhclDhERCQuCUscZtbCzP6tNQtEUm/KlCmMHTuWKVOmpDoUaQAS2eL4FDjH3fsC/YCRZnYG0dQMt7t7T2AH0VoFELNmAXB7qEe5NQtGAn8ws6wExi3S4JTN9lpQUJDqUKQBSFji8EjZVKPl1yx4LJTPBs4Pz0eH14T3h5Zfs8Dd3wHK1iwQEZEUSOg1DjPLCmsWfAAsJI41C4DYNQs2x+xWaxaIiKRQQhOHu5e6ez+i6aJPJ8FrFpjZcjNbHmYvFRGRBEjKqCqtWSAimWR/s1aUNm/L/mbxTYDZWCRyVFXnsDpa7JoF6/hszQKoeM0CiFmzIJRfHEZd9UBrFohIgu3uOZyi3l9nd8/hqQ4lLSVyrqocYHYYAaU1C0REGoiEJQ53fw04ZF3ydF+zYMqUKRQUFHDUUUdx2223JeOQIiIZRbPjllM23l1Eksdat6blZZeSlZMDVtF4mIqtW7euTsf91dcrGq9TOXfIL9zLn1/cVKfjZjolDhFJuZaXXcqRJ5/M4c2aYXEkjja9etXpuL75w/jqu9OhYxHjAVbU6dAZTXNViUjKZeXkxJ00UsHMaNayDV3btUh1KCmlxCEiqWeW9kmjjJnF05vWIClxiIhIXBrlNY7KloKE6peMbMzLRUr601KokgyNMnGISPrbvWcP437wA97fupXS0lKmTJrEscccw49uvZXde/bQoX17Hnj0UXJycrjnnnuYMWMG+/bt47jjjuP++++nZcuWPProo9x8881kZWVx+OGHs3jxYvbu3cukSZNYvnw5JQ5T/vsWBnxxEE88+hCLFj7NJ5/sYfO7Gxk64itc9+Npqf41pCUlDml02rkf9Cjp6ZklS8g54ggeu/tuAHYWFXHBxInMufNOOnXowF/nz+fHP/4xM2fOZMyYMVx55ZUATJ06lXvvvZfJkyczffp0nn76abp06UJhYSEAd955JwCrV69m3vMvcuXlFzJ/0UsAvLF2DY/9/TmaNWvGV84+k8vGf5ucz2lO1fKUOKTRubx0f6pDkBo4qWdPpt52Gz/53/9l5JAhtGvblnXr1zN6QrSET2lpKV26dwdgzZo1TJ06lcLCQnbt2sWIEdF6bwMHDiQvL4+LLrqIMWPGALBkyRImT54MwLHH9eRzXbqy8Z23ABgw8Eu0adsWgM/3PJ738zcrcVRAiUNE0lLPHj144bHH+Mfixfz09ts5+4tfpNdxx/HsnDkH6pTdx5GXl8ff/vY3+vbty6xZs1i0aBEAf/zjH1m2bBlPPfUU/fr1Y9WqVXgVLc1mzZsdeJ7VJIvSUs1uVBGNqhKJ0+bNmwGON7N1YVnkawDMrIOZLQzLIi80s/ah3Mzst2H549fM7LSyfZnZuFB/vZmNq/iIjdOWDz6g5WGHcfHXvsb3x49n+auv8uGOHSxbuRKA4uJi1q5dC0BRURE5OTkUFxfz4IMPHtjHW2+9xYABA5g+fTqdOnVi8+bNDB48+ECdjW+/xZb336PHsccl/wNmMLU4ROKUnZ0NkO/uJ5lZG2CFmS0E8oBn3f1WM7sRuBG4ARhFNKtzT2AAcBcwwMw6ANOAXKI1ZlaY2Vx335Hsz5SO1r75Jv/9q1/RpEkTsrOzuX3aNLKzspjy85/z8a5dlJSU8MMbbqB3797ccsstDBgwgGOOOYY+ffpQVFQEwPXXX8/69etxd4YOHUrfvn3p1asX3/3ud+nTpw8lDj//9e9o1rx5ij9tZlHiKKds/n3Nwy+VycnJAdgD4O5FZraOaFXK0cCQUG020Ro0N4Ty+8IyAS+ZWTszywl1F7r7doCQfEYCDyXrs6SzLw8axJcHDTqkfMEDDxx4XtZVNWnSJCZNmnRI3ccff/yQshYtWjBr1iwAXo+ZcuTrF17C1y+85MDrP8z6S61jb+iUOMrR/PsSDzPrTjQL9DLgSHffAuDuW8zsiFCtsuWPtSyyZCRd4xCpJTNrDfwVuNbdP66qagVlWhZZMpYSh9TJlClTGDt2LFOmTEl1KMlmREnjQXcv6w/ZGrqgCI8fhPLKlj/WssiSkZQ4pE7K1i8pKChIdShJE4ZzHgOsc/f/i3krdvnj8ssijw2jq84AdoYuraeB4WbWPozAGh7KRNKarnGIxGnp0qUAHYFzzGxVKP4RcCvwiJlNADbx2YqW84FzgQ1EF9XHA7j7djO7BXg51JtedqG8vmnQh9QnJQ6ROA2KRvqscPfcCt4eWr4gjKa6qqJ9uftMYGa9BlgBDfqQ+qSuKhGRYOp13+dLp57I6C9/KdWhpLWEtTjM7GjgPuAoYD8ww93vCDc9PQx0BzYCF7n7DotWcbmDqEm/B8hz91fCvsYBU8Ouf+busxMVt4ikhyH3/rsGtWpSJ7LiV2OrrXP+hRdz6bgJ3PSDq2u838YokS2OEuC/3P1E4AzgKjM7iehu2mfdvSfwbHgNB99dO5Ho7lpi7q4dAJwOTCubykFEpD7lDvgih7fTfy/VSVjicPctZS0Gdy8CYu+uLWsxzAbOD88P3F3r7i8BZXfXjiDcXRumYii7u1ZERFIgKdc4qrq7FtDdtSIiGSThiUN314qINCwJTRxm1hTdXSsi0qAkLHGEUVL3ortrRSRDXHf1RC49fxQb397AOaefwl/nPFD9Ro1QIm8AHAh8C1idKXfXikj6WDTh9GrrlE2rXl/+9/cz6nV/DVXCEoe7L6Hi6xOQpnfXiohI9XTnuIiIxEWJQ0RE4qLEISIicVHiEBGRuGhadalW/+vvq/Sj8yEVAAAMMklEQVS9Nh8WkQVs+rCownpPtElgYCKSEmpxiIgEW95/j7xvns9Xz/kiXxs6iPvvvTvVIaUltThEJC3teOTC6uvEsb9uP1ldbZ3srCymTL2Zk/r0ZfeuXVz4laGc+aUhHHf8CXEcqeFTi0NEJOh85FGc1KcvAK1at+bY447ng4ItKY4q/ShxiIhU4L3Nm1i3djWnnNo/1aGkHSUOEZFydu/exbXfGc+N035G6zYa4VGeEoeISIzi4mKu/c54vvL1bzBs1HmpDictKXGIiATuzk+uv5ZjjzuevCsnpTqctKXEISISvPLyMuY+/gj//tcSxowcwpiRQ1j83MJUh5V2NBxXRNJS+4serbZOfU+r3v/0M1i7SSuIVkctDhERiYsSh0icrrjiCoC+ZramrMzMOpjZQjNbHx7bh3Izs9+a2QYze83MTovZZlyov97Mxh16JJH0pMQhEqe8vDyA9eWKbwSedfeewLPhNcAooGf4mQjcBVGiAaYBA4DTgWllyUYk3SlxiMRp8ODBACXlikcDs8Pz2cD5MeX3eeQloJ2Z5QAjgIXuvt3ddwALgZEJD16kHihxiNSPI919C0B4PCKUdwE2x9TLD2WVlYukPY2qkjrZ36zVQY9yCKugzKsoP3QHZhOJurno1q1b/UUmUktKHFInu3sOT3UI6WKrmeW4+5bQFfVBKM8Hjo6p1xV4P5QPKVe+qKIdu/sMYAZAbm5uhclF6sene/cy9sKvsW/fPkpLShh+7le5+r9uSHVYaSdhicPMZgLnAR+4+8mhrAPwMNAd2Ahc5O47zMyAO4BzgT1Anru/ErYZB0wNu/2Zu89GJP3MBcYBt4bHJ2PKrzazOUQXwneG5PI08IuYC+LDgZuSHHNaG7lwQvWV4rg3b+nkpdXWada8OTPnPE6rVq0pLi7mWxecx5fOHkrf03JrfqBGIJHXOGZx6MU+jTyRjHfJJZcA9AJOMLN8M5tAlDCGmdl6YFh4DTAfeBvYANwDfA/A3bcDtwAvh5/poUxSyMxo1ao1ACUlxZSUFBN9r5VYCUsc7r4YKP+HoJEnkvEeeughgNfcvam7d3X3e939I3cf6u49w+N2gHBOX+Xun3f3Pu6+vGw/7j7T3Y8LP39O1eeRg5WWljJm5BC+dOqJnDloiKZVr0CyR1UlbOSJmU00s+VmtnzbNk0ZICK1k5WVxeMLFvHcstdY/eorrP/PulSHlHbSZThunUeeuPsMd89199zOnTvXa3Ai0vi0PfxwTj9jIEsWPZfqUNJOshPH1tAFRRwjTyoqFxGpd9s/+pCPd+4EYO/eT3hxyQv0+HzPFEeVfpI9HFcjT0QkbW37YCs/+uHV7C/dz/79+xlx3miGfFlDzstL5HDch4jGqXcys3yi0VG3Ao+EUSibgAtD9flEQ3E3EA3HHQ/RyBMzKxt5Ahp5ItJoLBh2b7V16nta9RNO7M1f//58ve6zIUpY4nD3Syp5a2gFdR24qpL9zARm1mNoIiJSB+lycVxERDKEEoeIiMRFiUNEROKixCEiInFR4hARkbgocYiIxCgtLeWCUWfzvbxLUx1K2tJ6HCKSll6Z+J163d9Zi1+oUb37Z87g2OOOZ3dRUb0evyFRi0NEJCjY8j6Ln13IBRdfnupQ0poSh4hIcOtPf8x//WgaTZrov8aq6LcjIgIseuYfdOjUmd6n9E11KGlP1zhERICVy5exaOEC/vn8M3z66V52F+3ihmsm8cs77kp1aGlHiUNEBPjBjf/ND278bwD+/eJSZt19p5JGJdRVJSIicVGLQ0TS0mkz7q62Tn1Pq17m9DMHcvqZAxOy74ZALQ4REYmLEoeIiMRFiUNEROKixCEiqedOtBBo+nN3MiTUhFHiEJGUK92yhZ379qV98nB39u0pIr9wb6pDSSmNqhKRlNvz4F/YetmlfJiTA2Y13q5FHRNNwY5dcdV3h/zCvfz5xU2c3axOh85oGZM4zGwkcAeQBfzJ3W9NcUgidabzOuK7drH77hlxb3dqDWe8rczl199X+40bceLIiK4qM8sC7gRGAScBl5jZSamNSqRudF5LpsqIxAGcDmxw97fdfR8wBxid4phE6krntWSkTEkcXYDNMa/zQ5lIJtN5LRkpU65xVHS17KCrYmY2EZgYXu4ys/8kIpBj6rZ5J+DD2m48pC5HjuOCY31qwL+vOn606CgVlB1ytbehn9tD6nLUFJ3XkKG/L6jud1ajj5UpiSMfODrmdVfg/dgK7j4DiP/qWhKZ2XJ3z011HJmiEfy+qj2vQed2Q5Tpv69M6ap6GehpZj3MrBlwMTA3xTGJ1JXOa8lIGdHicPcSM7saeJpo2OJMd1+b4rBE6kTntWSqjEgcAO4+H5if6jjqKK27G9JQg/99NZDzGhrBv1U9y+jfl6X7Lf4iIpJeMuUah4iIpAkljiQxs5Fm9h8z22BmN6Y6nnRmZjPN7AMzW5PqWKRqOq/j01DObSWOJNDUEnGbBYxMdRBSNZ3XtTKLBnBuK3Ekh6aWiIO7Lwa2pzoOqZbO6zg1lHNbiSM5NLWENEQ6rxspJY7kqNHUEiIZRud1I6XEkRw1mlpCJMPovG6klDiSQ1NLSEOk87qRUuJIAncvAcqmllgHPKKpJSpnZg8BLwInmFm+mU1IdUxyKJ3X8Wso57buHBcRkbioxSEiInFR4hARkbgocYiISFyUOEREJC5KHCIiEhcljgxnZt3jmWnTzGaZ2TfC8z9VNCmdmeWZ2e/rM06R+mJmG82sUwXl/0r0MSSSMSsASv1z92+nOgaReIQZeSvk7l9MZiyNmVocDUOWmd1jZmvN7B9mdpiZ9TOzl8zsNTN7wszal9/IzBaZWW54Pt7M3jSzF4CBMXW+ambLzGylmT1jZkeaWRMzW29mnUOdJmE9Bn1Dk0qZ2RQz+354fruZPReeDzWzB8zsEjNbbWZrzOyXMdvtMrPpZrYMODOm/DAzW2BmV5bVC49Dwrn9mJm9YWYPmpmF984NZUvM7LdmNi+Udwx/OyvN7G5i5uEys7+Z2Yrw9zUxlE0ws9tj6lxpZv+XuN9eelHiaBh6Ane6e2+gELgAuA+4wd1PAVYD0yrb2MxygJuJEsYworUVyiwBznD3U4mmzZ7i7vuBB4DLQp0vA6+6+4f1+qmkoVkMfCk8zwVam1lTYBCwHvglcA7QD/iCmZ0f6rYC1rj7AHdfEspaA/8P+Iu731PBsU4FriU6l48FBppZC+BuYJS7DwI6x9SfBiwJ5/lcoFvMe1e4e/8Q8/fNrCPR38LXQvwA44E/x/0byVBKHA3DO+6+KjxfAXweaOfuL4Sy2cDgKrYfACxy921hXYWHY97rCjxtZquB64HeoXwmMDY8v4JG9EcjtbYC6G9mbYBPiabeyCVKJoV8dg6WAA/y2TlbCvy13L6eBP7s7vdVcqx/u3t++JKzCugO9ALedvd3Qp2HYuoPJvoyhLs/BeyIee/7ZvYq8BLRpI493X038Bxwnpn1Apq6++qa/yoymxJHw/BpzPNSoF0t9lHZ3DO/A37v7n2A7wAtANx9M7DVzM4hSjx/r8UxpRFx92JgI9G3838B/wTOJvqis6mKTfe6e2m5sqXAqLIuqAqU/5vIpuJp4A8KsXyBmQ0halGf6e59gZWEvwHgT0Aejay1AUocDdVOYIeZlXULfAt4oYr6y4AhoZ+3KXBhzHuHA++F5+PKbfcnom9pj1Twhy1SkcXAdeHxn8B3iVoELwFnmVmncAH8Eqo+Z38CfAT8IY5jvwEca2bdw+tvlovrMgAzGwWUXRM8HNjh7ntCy+KMsg3cfRlRC+RSDm69NHhKHA3XOOBXZvYaUZ/x9MoquvsW4KdEXQfPAK/EvP1T4FEz+ydQ/hrGXKK+5kb1bUvq5J9ADvCiu28F9gL/DOfgTcDzwKvAK+7+ZDX7uhZoYWa31eTA7v4J8D1ggZktAbYSfcmC6BrfYDN7BRjOZy2gBUB2+Du6hSjBxXoEWOruO2hENDuu1FoYkXW7u3+p2soiacDMWrv7rtDFdSew3t1vr267KvY3j+hv4Nl6CzIDqMUhtWJmNxJdsLwp1bGIxOFKM1sFrCXqhrq7Njsxs3Zm9ibwSWNLGqAWh4iIxEktDhERiYsSh4iIxEWJQ0RE4qLEISIicVHiEBGRuChxiIhIXP4/HyiHzJZ0wnYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig,(ax1,ax2) = plt.subplots(ncols=2)\n",
    "sn.barplot(data=train,x='holiday',y='cnt',hue='season',ax=ax1)\n",
    "sn.barplot(data=train,x='workingday',y='cnt',hue='season',ax=ax2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 共享单车数量的直方图／分布\n",
    "fig = plt.figure()\n",
    "sn.distplot(train.cnt.values, bins=30, kde=True)\n",
    "plt.xlabel('Count of Bikes', fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 相关性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f5b97ba64d0>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "corrMatt = train[[\"temp\",\"atemp\",\n",
    "                  \"hum\",\"windspeed\",\n",
    "                  \"casual\",\"registered\",\n",
    "                  \"cnt\"]].corr()\n",
    "mask = np.array(corrMatt)\n",
    "mask[np.tril_indices_from(mask)] = False\n",
    "sn.heatmap(corrMatt, mask=mask,\n",
    "           vmax=.8, square=True,annot=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "体感温度和温度高度相关\n",
    "目标cnt与温度正相关、湿度和风速负相关"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据准备\n",
    "对数据进行准备工作，分离特征与输出"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  season  yr mnth  holiday weekday  workingday weathersit      temp     atemp  \\\n",
       "0      1   0    1        0       6           0          2  0.344167  0.363625   \n",
       "1      1   0    1        0       0           0          2  0.363478  0.353739   \n",
       "2      1   0    1        0       1           1          1  0.196364  0.189405   \n",
       "3      1   0    1        0       2           1          1  0.200000  0.212122   \n",
       "4      1   0    1        0       3           1          1  0.226957  0.229270   \n",
       "\n",
       "        hum  windspeed  \n",
       "0  0.805833   0.160446  \n",
       "1  0.696087   0.248539  \n",
       "2  0.437273   0.248309  \n",
       "3  0.590435   0.160296  \n",
       "4  0.436957   0.186900  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 从原始数据中分离输入特征x和输出y\n",
    "y = train['cnt'].values\n",
    "X = train.drop(['cnt','instant','dteday','casual','registered'], axis = 1)\n",
    "#X.describe()\n",
    "X.head()\n",
    "#将数据集中不需要预测的'casual','registered'两项，instant,日期等无关项去处，得出如下结果:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从前面的数据搜索可以看出，每天骑车的用户其实与每天的日期关系不大，因此可以去除日期这个特征，而在其他特征的直方图中可以看出其他特征与输出y有较大的关系。因此保留对应特征。\n",
    "\n",
    "\n",
    "当数据量比较大时，可用train_test_split从训练集中分出一部分做校验集；\n",
    "下面将训练数据分割成训练集和测试集，只是让大家对模型的训练误差、校验集上的测试误差估计、和测试集上的测试误差做个比较，实际任务中无需这么处理。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>612</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.725833</td>\n",
       "      <td>0.686888</td>\n",
       "      <td>0.755000</td>\n",
       "      <td>0.236321</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>424</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344348</td>\n",
       "      <td>0.348470</td>\n",
       "      <td>0.804783</td>\n",
       "      <td>0.179117</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>266</th>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.606667</td>\n",
       "      <td>0.564412</td>\n",
       "      <td>0.862500</td>\n",
       "      <td>0.078383</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>134</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.562500</td>\n",
       "      <td>0.536000</td>\n",
       "      <td>0.867083</td>\n",
       "      <td>0.152979</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>327</th>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.373333</td>\n",
       "      <td>0.372471</td>\n",
       "      <td>0.549167</td>\n",
       "      <td>0.167304</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    season  yr mnth  holiday weekday  workingday weathersit      temp  \\\n",
       "612      3   1    9        0       2           1          1  0.725833   \n",
       "424      1   1    2        0       3           1          2  0.344348   \n",
       "266      4   0    9        0       6           0          2  0.606667   \n",
       "134      2   0    5        0       0           0          2  0.562500   \n",
       "327      4   0   11        1       4           0          1  0.373333   \n",
       "\n",
       "        atemp       hum  windspeed  \n",
       "612  0.686888  0.755000   0.236321  \n",
       "424  0.348470  0.804783   0.179117  \n",
       "266  0.564412  0.862500   0.078383  \n",
       "134  0.536000  0.867083   0.152979  \n",
       "327  0.372471  0.549167   0.167304  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#将数据分割训练数据与测试数据\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 随机采样20%的数据构建测试样本，其余作为训练样本\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=3, test_size=0.2)\n",
    "X_train.shape\n",
    "X_train.head()\n",
    "#X_test.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weathersit_1</th>\n",
       "      <th>weathersit_2</th>\n",
       "      <th>weathersit_3</th>\n",
       "      <th>weekday_0</th>\n",
       "      <th>weekday_1</th>\n",
       "      <th>weekday_2</th>\n",
       "      <th>weekday_3</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>612</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>424</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>266</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>134</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>327</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "612         0         0         1         0       0       0       0       0   \n",
       "424         1         0         0         0       0       1       0       0   \n",
       "266         0         0         0         1       0       0       0       0   \n",
       "134         0         1         0         0       0       0       0       0   \n",
       "327         0         0         0         1       0       0       0       0   \n",
       "\n",
       "     mnth_5  mnth_6    ...      weathersit_1  weathersit_2  weathersit_3  \\\n",
       "612       0       0    ...                 1             0             0   \n",
       "424       0       0    ...                 0             1             0   \n",
       "266       0       0    ...                 0             1             0   \n",
       "134       1       0    ...                 0             1             0   \n",
       "327       0       0    ...                 1             0             0   \n",
       "\n",
       "     weekday_0  weekday_1  weekday_2  weekday_3  weekday_4  weekday_5  \\\n",
       "612          0          0          1          0          0          0   \n",
       "424          0          0          0          1          0          0   \n",
       "266          0          0          0          0          0          0   \n",
       "134          1          0          0          0          0          0   \n",
       "327          0          0          0          0          1          0   \n",
       "\n",
       "     weekday_6  \n",
       "612          0  \n",
       "424          0  \n",
       "266          1  \n",
       "134          0  \n",
       "327          0  \n",
       "\n",
       "[5 rows x 26 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对训练数据进行one-hot编码\n",
    "categorical_features = ['season','mnth','weathersit','weekday']\n",
    "x_train_cat = X_train[categorical_features]\n",
    "x_train_cat = pd.get_dummies(x_train_cat)\n",
    "x_train_cat.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weathersit_1</th>\n",
       "      <th>weathersit_2</th>\n",
       "      <th>weathersit_3</th>\n",
       "      <th>weekday_0</th>\n",
       "      <th>weekday_1</th>\n",
       "      <th>weekday_2</th>\n",
       "      <th>weekday_3</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>558</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>406</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "80          0         1         0         0       0       0       1       0   \n",
       "97          0         1         0         0       0       0       0       1   \n",
       "558         0         0         1         0       0       0       0       0   \n",
       "406         1         0         0         0       0       1       0       0   \n",
       "124         0         1         0         0       0       0       0       0   \n",
       "\n",
       "     mnth_5  mnth_6    ...      weathersit_1  weathersit_2  weathersit_3  \\\n",
       "80        0       0    ...                 1             0             0   \n",
       "97        0       0    ...                 0             1             0   \n",
       "558       0       0    ...                 1             0             0   \n",
       "406       0       0    ...                 0             0             1   \n",
       "124       1       0    ...                 1             0             0   \n",
       "\n",
       "     weekday_0  weekday_1  weekday_2  weekday_3  weekday_4  weekday_5  \\\n",
       "80           0          0          1          0          0          0   \n",
       "97           0          0          0          0          0          1   \n",
       "558          0          0          0          0          1          0   \n",
       "406          0          0          0          0          0          0   \n",
       "124          0          0          0          0          1          0   \n",
       "\n",
       "     weekday_6  \n",
       "80           0  \n",
       "97           0  \n",
       "558          0  \n",
       "406          1  \n",
       "124          0  \n",
       "\n",
       "[5 rows x 26 columns]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对测试数据进行one-hot编码\n",
    "categorical_features = ['season','mnth','weathersit','weekday']\n",
    "x_test_cat = X_test[categorical_features]\n",
    "x_test_cat = pd.get_dummies(x_test_cat)\n",
    "x_test_cat.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>612</th>\n",
       "      <td>0.830744</td>\n",
       "      <td>0.797844</td>\n",
       "      <td>0.776350</td>\n",
       "      <td>0.441027</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>424</th>\n",
       "      <td>0.355395</td>\n",
       "      <td>0.353624</td>\n",
       "      <td>0.827540</td>\n",
       "      <td>0.323097</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>266</th>\n",
       "      <td>0.682257</td>\n",
       "      <td>0.637077</td>\n",
       "      <td>0.886889</td>\n",
       "      <td>0.115430</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>134</th>\n",
       "      <td>0.627223</td>\n",
       "      <td>0.599783</td>\n",
       "      <td>0.891602</td>\n",
       "      <td>0.269213</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>327</th>\n",
       "      <td>0.391512</td>\n",
       "      <td>0.385129</td>\n",
       "      <td>0.564696</td>\n",
       "      <td>0.298744</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         temp     atemp       hum  windspeed\n",
       "612  0.830744  0.797844  0.776350   0.441027\n",
       "424  0.355395  0.353624  0.827540   0.323097\n",
       "266  0.682257  0.637077  0.886889   0.115430\n",
       "134  0.627223  0.599783  0.891602   0.269213\n",
       "327  0.391512  0.385129  0.564696   0.298744"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#数值型变量预处理-训练数据----归一化处理\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "mn_x = MinMaxScaler()\n",
    "numerical_features = ['temp','atemp','hum','windspeed']\n",
    "temp = mn_x.fit_transform(X_train[numerical_features])\n",
    "\n",
    "x_train_num = pd.DataFrame(data=temp, columns=numerical_features, index =X_train.index)\n",
    "x_train_num.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_3</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>612</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.830744</td>\n",
       "      <td>0.797844</td>\n",
       "      <td>0.776350</td>\n",
       "      <td>0.441027</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>424</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.355395</td>\n",
       "      <td>0.353624</td>\n",
       "      <td>0.827540</td>\n",
       "      <td>0.323097</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>266</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.682257</td>\n",
       "      <td>0.637077</td>\n",
       "      <td>0.886889</td>\n",
       "      <td>0.115430</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>134</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.627223</td>\n",
       "      <td>0.599783</td>\n",
       "      <td>0.891602</td>\n",
       "      <td>0.269213</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>327</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.391512</td>\n",
       "      <td>0.385129</td>\n",
       "      <td>0.564696</td>\n",
       "      <td>0.298744</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 32 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "612         0         0         1         0       0       0       0       0   \n",
       "424         1         0         0         0       0       1       0       0   \n",
       "266         0         0         0         1       0       0       0       0   \n",
       "134         0         1         0         0       0       0       0       0   \n",
       "327         0         0         0         1       0       0       0       0   \n",
       "\n",
       "     mnth_5  mnth_6     ...      weekday_3  weekday_4  weekday_5  weekday_6  \\\n",
       "612       0       0     ...              0          0          0          0   \n",
       "424       0       0     ...              1          0          0          0   \n",
       "266       0       0     ...              0          0          0          1   \n",
       "134       1       0     ...              0          0          0          0   \n",
       "327       0       0     ...              0          1          0          0   \n",
       "\n",
       "         temp     atemp       hum  windspeed  holiday  workingday  \n",
       "612  0.830744  0.797844  0.776350   0.441027        0           1  \n",
       "424  0.355395  0.353624  0.827540   0.323097        0           1  \n",
       "266  0.682257  0.637077  0.886889   0.115430        0           0  \n",
       "134  0.627223  0.599783  0.891602   0.269213        0           0  \n",
       "327  0.391512  0.385129  0.564696   0.298744        1           0  \n",
       "\n",
       "[5 rows x 32 columns]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Join categorical and numerical features\n",
    "x_train = pd.concat([x_train_cat, x_train_num, X_train['holiday'],  X_train['workingday']], axis = 1, ignore_index=False)\n",
    "x_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>0.441970</td>\n",
       "      <td>0.467749</td>\n",
       "      <td>0.537430</td>\n",
       "      <td>0.455230</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>0.293083</td>\n",
       "      <td>0.307461</td>\n",
       "      <td>0.890262</td>\n",
       "      <td>0.458366</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>558</th>\n",
       "      <td>0.827667</td>\n",
       "      <td>0.763095</td>\n",
       "      <td>0.379072</td>\n",
       "      <td>0.255877</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>406</th>\n",
       "      <td>0.135991</td>\n",
       "      <td>0.150693</td>\n",
       "      <td>0.715235</td>\n",
       "      <td>0.616900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>0.466589</td>\n",
       "      <td>0.469509</td>\n",
       "      <td>0.236691</td>\n",
       "      <td>0.631025</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         temp     atemp       hum  windspeed\n",
       "80   0.441970  0.467749  0.537430   0.455230\n",
       "97   0.293083  0.307461  0.890262   0.458366\n",
       "558  0.827667  0.763095  0.379072   0.255877\n",
       "406  0.135991  0.150693  0.715235   0.616900\n",
       "124  0.466589  0.469509  0.236691   0.631025"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler\n",
    "mn_x = MinMaxScaler()\n",
    "numerical_features = ['temp','atemp','hum','windspeed']\n",
    "temp = mn_x.fit_transform(X_test[numerical_features])\n",
    "\n",
    "x_test_num = pd.DataFrame(data=temp, columns=numerical_features, index =X_test.index)\n",
    "x_test_num.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_3</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.441970</td>\n",
       "      <td>0.467749</td>\n",
       "      <td>0.537430</td>\n",
       "      <td>0.455230</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.293083</td>\n",
       "      <td>0.307461</td>\n",
       "      <td>0.890262</td>\n",
       "      <td>0.458366</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>558</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.827667</td>\n",
       "      <td>0.763095</td>\n",
       "      <td>0.379072</td>\n",
       "      <td>0.255877</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>406</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.135991</td>\n",
       "      <td>0.150693</td>\n",
       "      <td>0.715235</td>\n",
       "      <td>0.616900</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.466589</td>\n",
       "      <td>0.469509</td>\n",
       "      <td>0.236691</td>\n",
       "      <td>0.631025</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 32 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "80          0         1         0         0       0       0       1       0   \n",
       "97          0         1         0         0       0       0       0       1   \n",
       "558         0         0         1         0       0       0       0       0   \n",
       "406         1         0         0         0       0       1       0       0   \n",
       "124         0         1         0         0       0       0       0       0   \n",
       "\n",
       "     mnth_5  mnth_6     ...      weekday_3  weekday_4  weekday_5  weekday_6  \\\n",
       "80        0       0     ...              0          0          0          0   \n",
       "97        0       0     ...              0          0          1          0   \n",
       "558       0       0     ...              0          1          0          0   \n",
       "406       0       0     ...              0          0          0          1   \n",
       "124       1       0     ...              0          1          0          0   \n",
       "\n",
       "         temp     atemp       hum  windspeed  holiday  workingday  \n",
       "80   0.441970  0.467749  0.537430   0.455230        0           1  \n",
       "97   0.293083  0.307461  0.890262   0.458366        0           1  \n",
       "558  0.827667  0.763095  0.379072   0.255877        0           1  \n",
       "406  0.135991  0.150693  0.715235   0.616900        0           0  \n",
       "124  0.466589  0.469509  0.236691   0.631025        0           1  \n",
       "\n",
       "[5 rows x 32 columns]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Join categorical and numerical features\n",
    "x_test = pd.concat([x_test_cat, x_test_num, X_test['holiday'],  X_test['workingday']], axis = 1, ignore_index=False)\n",
    "x_test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 584 entries, 612 to 664\n",
      "Data columns (total 32 columns):\n",
      "season_1        584 non-null uint8\n",
      "season_2        584 non-null uint8\n",
      "season_3        584 non-null uint8\n",
      "season_4        584 non-null uint8\n",
      "mnth_1          584 non-null uint8\n",
      "mnth_2          584 non-null uint8\n",
      "mnth_3          584 non-null uint8\n",
      "mnth_4          584 non-null uint8\n",
      "mnth_5          584 non-null uint8\n",
      "mnth_6          584 non-null uint8\n",
      "mnth_7          584 non-null uint8\n",
      "mnth_8          584 non-null uint8\n",
      "mnth_9          584 non-null uint8\n",
      "mnth_10         584 non-null uint8\n",
      "mnth_11         584 non-null uint8\n",
      "mnth_12         584 non-null uint8\n",
      "weathersit_1    584 non-null uint8\n",
      "weathersit_2    584 non-null uint8\n",
      "weathersit_3    584 non-null uint8\n",
      "weekday_0       584 non-null uint8\n",
      "weekday_1       584 non-null uint8\n",
      "weekday_2       584 non-null uint8\n",
      "weekday_3       584 non-null uint8\n",
      "weekday_4       584 non-null uint8\n",
      "weekday_5       584 non-null uint8\n",
      "weekday_6       584 non-null uint8\n",
      "temp            584 non-null float64\n",
      "atemp           584 non-null float64\n",
      "hum             584 non-null float64\n",
      "windspeed       584 non-null float64\n",
      "holiday         584 non-null int64\n",
      "workingday      584 non-null int64\n",
      "dtypes: float64(4), int64(2), uint8(26)\n",
      "memory usage: 46.8 KB\n"
     ]
    }
   ],
   "source": [
    "x_train.to_csv('Reg_train_data.csv', index=False)\n",
    "x_train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 147 entries, 80 to 95\n",
      "Data columns (total 32 columns):\n",
      "season_1        147 non-null uint8\n",
      "season_2        147 non-null uint8\n",
      "season_3        147 non-null uint8\n",
      "season_4        147 non-null uint8\n",
      "mnth_1          147 non-null uint8\n",
      "mnth_2          147 non-null uint8\n",
      "mnth_3          147 non-null uint8\n",
      "mnth_4          147 non-null uint8\n",
      "mnth_5          147 non-null uint8\n",
      "mnth_6          147 non-null uint8\n",
      "mnth_7          147 non-null uint8\n",
      "mnth_8          147 non-null uint8\n",
      "mnth_9          147 non-null uint8\n",
      "mnth_10         147 non-null uint8\n",
      "mnth_11         147 non-null uint8\n",
      "mnth_12         147 non-null uint8\n",
      "weathersit_1    147 non-null uint8\n",
      "weathersit_2    147 non-null uint8\n",
      "weathersit_3    147 non-null uint8\n",
      "weekday_0       147 non-null uint8\n",
      "weekday_1       147 non-null uint8\n",
      "weekday_2       147 non-null uint8\n",
      "weekday_3       147 non-null uint8\n",
      "weekday_4       147 non-null uint8\n",
      "weekday_5       147 non-null uint8\n",
      "weekday_6       147 non-null uint8\n",
      "temp            147 non-null float64\n",
      "atemp           147 non-null float64\n",
      "hum             147 non-null float64\n",
      "windspeed       147 non-null float64\n",
      "holiday         147 non-null int64\n",
      "workingday      147 non-null int64\n",
      "dtypes: float64(4), int64(2), uint8(26)\n",
      "memory usage: 11.8 KB\n"
     ]
    }
   ],
   "source": [
    "x_test.to_csv('Reg_test_data.csv', index=False)\n",
    "x_test.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index([u'season_1', u'season_2', u'season_3', u'season_4', u'mnth_1',\n",
       "       u'mnth_2', u'mnth_3', u'mnth_4', u'mnth_5', u'mnth_6', u'mnth_7',\n",
       "       u'mnth_8', u'mnth_9', u'mnth_10', u'mnth_11', u'mnth_12',\n",
       "       u'weathersit_1', u'weathersit_2', u'weathersit_3', u'weekday_0',\n",
       "       u'weekday_1', u'weekday_2', u'weekday_3', u'weekday_4', u'weekday_5',\n",
       "       u'weekday_6', u'temp', u'atemp', u'hum', u'windspeed', u'holiday',\n",
       "       u'workingday'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#用于后续显示权重系数对应的特征\n",
    "columns =x_train.columns\n",
    "columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 确定模型类型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 缺省参数的线性回归（最小二乘模型）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>coef</th>\n",
       "      <th>columns</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>mnth_9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>mnth_10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>mnth_3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>mnth_2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>mnth_4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>mnth_5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>mnth_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>mnth_12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>mnth_8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>mnth_11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>mnth_6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>mnth_7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>1.515382e+15</td>\n",
       "      <td>weekday_6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>1.515382e+15</td>\n",
       "      <td>weekday_0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>weekday_5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>weekday_3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>weekday_2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>weekday_4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>weekday_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>4.408200e+14</td>\n",
       "      <td>workingday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>4.408200e+14</td>\n",
       "      <td>holiday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.562924e+13</td>\n",
       "      <td>season_4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.562924e+13</td>\n",
       "      <td>season_2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.562924e+13</td>\n",
       "      <td>season_3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.562924e+13</td>\n",
       "      <td>season_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>6.413185e+03</td>\n",
       "      <td>atemp</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>-1.129668e+03</td>\n",
       "      <td>temp</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>-1.689877e+03</td>\n",
       "      <td>windspeed</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>-2.888695e+03</td>\n",
       "      <td>hum</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>-4.778037e+14</td>\n",
       "      <td>weathersit_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>-4.778037e+14</td>\n",
       "      <td>weathersit_2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>-4.778037e+14</td>\n",
       "      <td>weathersit_3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            coef       columns\n",
       "12  2.516870e+15        mnth_9\n",
       "13  2.516870e+15       mnth_10\n",
       "6   2.516870e+15        mnth_3\n",
       "5   2.516870e+15        mnth_2\n",
       "7   2.516870e+15        mnth_4\n",
       "8   2.516870e+15        mnth_5\n",
       "4   2.516870e+15        mnth_1\n",
       "15  2.516870e+15       mnth_12\n",
       "11  2.516870e+15        mnth_8\n",
       "14  2.516870e+15       mnth_11\n",
       "9   2.516870e+15        mnth_6\n",
       "10  2.516870e+15        mnth_7\n",
       "25  1.515382e+15     weekday_6\n",
       "19  1.515382e+15     weekday_0\n",
       "24  1.074562e+15     weekday_5\n",
       "22  1.074562e+15     weekday_3\n",
       "21  1.074562e+15     weekday_2\n",
       "23  1.074562e+15     weekday_4\n",
       "20  1.074562e+15     weekday_1\n",
       "31  4.408200e+14    workingday\n",
       "30  4.408200e+14       holiday\n",
       "3   1.562924e+13      season_4\n",
       "1   1.562924e+13      season_2\n",
       "2   1.562924e+13      season_3\n",
       "0   1.562924e+13      season_1\n",
       "27  6.413185e+03         atemp\n",
       "26 -1.129668e+03          temp\n",
       "29 -1.689877e+03     windspeed\n",
       "28 -2.888695e+03           hum\n",
       "16 -4.778037e+14  weathersit_1\n",
       "17 -4.778037e+14  weathersit_2\n",
       "18 -4.778037e+14  weathersit_3"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 线性回归\n",
    "#class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "# 使用默认配置初始化\n",
    "lr = LinearRegression()\n",
    "\n",
    "# 训练模型参数\n",
    "lr.fit(x_train, y_train)\n",
    "\n",
    "# 预测\n",
    "y_test_pred_lr = lr.predict(x_test)\n",
    "y_train_pred_lr = lr.predict(x_train)          #模型在训练集上的性能\n",
    "\n",
    "\n",
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(columns), \"coef\":list((lr.coef_.T))})\n",
    "fs.sort_values(by=['coef'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The RMSE of LinearRegression on test is 1425.9070391697144\n",
      "The RMSE of LinearRegression on train is 1223.2294812789066\n"
     ]
    }
   ],
   "source": [
    "# 使用r2_score评价模型在测试集和训练集上的性能，并输出评估结果\n",
    "#测试集\n",
    "#print 'The r2 score of LinearRegression on test is', r2_score(y_test, y_test_pred_lr)\n",
    "#训练集\n",
    "#print 'The r2 score of LinearRegression on train is', r2_score(y_train, y_train_pred_lr)\n",
    "\n",
    "from sklearn import metrics\n",
    "# 用scikit-learn计算MSE\n",
    "#print \"MSE:\",metrics.mean_squared_error(y_test, y_pred)\n",
    "# 用scikit-learn计算RMSE\n",
    "#测试集\n",
    "print \"The RMSE of LinearRegression on test is\",np.sqrt(metrics.mean_squared_error(y_test, y_test_pred_lr))\n",
    "#训练集\n",
    "print \"The RMSE of LinearRegression on train is\",np.sqrt(metrics.mean_squared_error(y_train, y_train_pred_lr))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#在训练集上观察预测残差的分布\n",
    "f, ax = plt.subplots(figsize=(7, 5)) \n",
    "f.tight_layout() \n",
    "ax.hist(y_train - y_train_pred_lr,bins=40, label='Residuals Linear', color='b', alpha=.5); \n",
    "ax.set_title(\"Count of BikeSharing\") \n",
    "ax.legend(loc='best');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 正则化的线性回归（L2正则 --> 岭回归）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The RMSE of RidgeCV on test is 1358.4702546545043\n",
      "The RMSE of RidgeCV on train is 1226.5083295231257\n"
     ]
    }
   ],
   "source": [
    "#岭回归／L2正则\n",
    "#class sklearn.linear_model.RidgeCV(alphas=(0.1, 1.0, 10.0), fit_intercept=True, \n",
    "#                                  normalize=False, scoring=None, cv=None, gcv_mode=None, \n",
    "#                                  store_cv_values=False)\n",
    "from sklearn.linear_model import  RidgeCV\n",
    "\n",
    "#设置超参数（正则参数）范围\n",
    "alphas = [ 0.0001,0.001,0.01, 0.1, 1, 10,100,1000,10000]\n",
    "#n_alphas = 20\n",
    "#alphas = np.logspace(-5,2,n_alphas)\n",
    "\n",
    "#生成一个RidgeCV实例\n",
    "ridge = RidgeCV(alphas=alphas, store_cv_values=True)  \n",
    "\n",
    "\n",
    "#模型训练\n",
    "ridge.fit(x_train, y_train)    \n",
    "\n",
    "#预测\n",
    "y_test_pred_ridge = ridge.predict(x_test)\n",
    "y_train_pred_ridge = ridge.predict(x_train)\n",
    "\n",
    "\n",
    "# 评估，使用RMSE评价模型在测试集和训练集上的性能\n",
    "#测试集\n",
    "print \"The RMSE of RidgeCV on test is\",np.sqrt(metrics.mean_squared_error(y_test, y_test_pred_ridge))\n",
    "#训练集\n",
    "print \"The RMSE of RidgeCV on train is\",np.sqrt(metrics.mean_squared_error(y_train, y_train_pred_ridge))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('alpha is:', 1.0)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "      <th>columns</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>645.977796</td>\n",
       "      <td>mnth_9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>345.392558</td>\n",
       "      <td>mnth_10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>252.076321</td>\n",
       "      <td>mnth_3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>-10.550228</td>\n",
       "      <td>mnth_2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>116.970723</td>\n",
       "      <td>mnth_4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>111.760867</td>\n",
       "      <td>mnth_5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>-147.679302</td>\n",
       "      <td>mnth_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>-121.196522</td>\n",
       "      <td>mnth_12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>-107.594401</td>\n",
       "      <td>mnth_8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>-306.081724</td>\n",
       "      <td>mnth_11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>-298.715958</td>\n",
       "      <td>mnth_6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>-480.360129</td>\n",
       "      <td>mnth_7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>1.515382e+15</td>\n",
       "      <td>216.262305</td>\n",
       "      <td>weekday_6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>1.515382e+15</td>\n",
       "      <td>-159.770573</td>\n",
       "      <td>weekday_0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>79.139881</td>\n",
       "      <td>weekday_5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>27.191082</td>\n",
       "      <td>weekday_3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>32.682578</td>\n",
       "      <td>weekday_2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>-29.175539</td>\n",
       "      <td>weekday_4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>-166.329734</td>\n",
       "      <td>weekday_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>4.408200e+14</td>\n",
       "      <td>235.764349</td>\n",
       "      <td>workingday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>4.408200e+14</td>\n",
       "      <td>-292.256081</td>\n",
       "      <td>holiday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.562924e+13</td>\n",
       "      <td>654.986098</td>\n",
       "      <td>season_4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.562924e+13</td>\n",
       "      <td>264.767297</td>\n",
       "      <td>season_2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.562924e+13</td>\n",
       "      <td>-31.094284</td>\n",
       "      <td>season_3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.562924e+13</td>\n",
       "      <td>-888.659112</td>\n",
       "      <td>season_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>6.413185e+03</td>\n",
       "      <td>2514.457408</td>\n",
       "      <td>atemp</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>-1.129668e+03</td>\n",
       "      <td>2040.782568</td>\n",
       "      <td>temp</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>-1.689877e+03</td>\n",
       "      <td>-1621.814438</td>\n",
       "      <td>windspeed</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>-2.888695e+03</td>\n",
       "      <td>-2344.319988</td>\n",
       "      <td>hum</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>-4.778037e+14</td>\n",
       "      <td>831.700749</td>\n",
       "      <td>weathersit_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>-4.778037e+14</td>\n",
       "      <td>568.417948</td>\n",
       "      <td>weathersit_2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>-4.778037e+14</td>\n",
       "      <td>-1400.118696</td>\n",
       "      <td>weathersit_3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         coef_lr   coef_ridge       columns\n",
       "12  2.516870e+15   645.977796        mnth_9\n",
       "13  2.516870e+15   345.392558       mnth_10\n",
       "6   2.516870e+15   252.076321        mnth_3\n",
       "5   2.516870e+15   -10.550228        mnth_2\n",
       "7   2.516870e+15   116.970723        mnth_4\n",
       "8   2.516870e+15   111.760867        mnth_5\n",
       "4   2.516870e+15  -147.679302        mnth_1\n",
       "15  2.516870e+15  -121.196522       mnth_12\n",
       "11  2.516870e+15  -107.594401        mnth_8\n",
       "14  2.516870e+15  -306.081724       mnth_11\n",
       "9   2.516870e+15  -298.715958        mnth_6\n",
       "10  2.516870e+15  -480.360129        mnth_7\n",
       "25  1.515382e+15   216.262305     weekday_6\n",
       "19  1.515382e+15  -159.770573     weekday_0\n",
       "24  1.074562e+15    79.139881     weekday_5\n",
       "22  1.074562e+15    27.191082     weekday_3\n",
       "21  1.074562e+15    32.682578     weekday_2\n",
       "23  1.074562e+15   -29.175539     weekday_4\n",
       "20  1.074562e+15  -166.329734     weekday_1\n",
       "31  4.408200e+14   235.764349    workingday\n",
       "30  4.408200e+14  -292.256081       holiday\n",
       "3   1.562924e+13   654.986098      season_4\n",
       "1   1.562924e+13   264.767297      season_2\n",
       "2   1.562924e+13   -31.094284      season_3\n",
       "0   1.562924e+13  -888.659112      season_1\n",
       "27  6.413185e+03  2514.457408         atemp\n",
       "26 -1.129668e+03  2040.782568          temp\n",
       "29 -1.689877e+03 -1621.814438     windspeed\n",
       "28 -2.888695e+03 -2344.319988           hum\n",
       "16 -4.778037e+14   831.700749  weathersit_1\n",
       "17 -4.778037e+14   568.417948  weathersit_2\n",
       "18 -4.778037e+14 -1400.118696  weathersit_3"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rmse_mean = np.sqrt(np.mean(ridge.cv_values_, axis = 0))\n",
    "plt.plot(np.log10(alphas), rmse_mean.reshape(len(alphas),1)) \n",
    "#这是为了标出最佳参数的位置，不是必须\n",
    "#plt.plot(np.log10(ridge.alpha_)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('rmse')\n",
    "plt.show()\n",
    "\n",
    "print ('alpha is:', ridge.alpha_)\n",
    "\n",
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(columns), \"coef_lr\":list((lr.coef_.T)), \"coef_ridge\":list((ridge.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 正则化的线性回归（L1正则 --> Lasso）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The RMSE of LassoCV on test is 1375.5235701554561\n",
      "The RMSE of LassoCV on train is 1230.8228172811478\n"
     ]
    }
   ],
   "source": [
    "#### Lasso／L1正则\n",
    "# class sklearn.linear_model.LassoCV(eps=0.001, n_alphas=100, alphas=None, fit_intercept=True, \n",
    "#                                    normalize=False, precompute=’auto’, max_iter=1000, \n",
    "#                                    tol=0.0001, copy_X=True, cv=None, verbose=False, n_jobs=1,\n",
    "#                                    positive=False, random_state=None, selection=’cyclic’)\n",
    "from sklearn.linear_model import LassoCV\n",
    "\n",
    "#设置超参数搜索范围\n",
    "#alphas = [ 0.01, 0.1, 1, 10,100]\n",
    "\n",
    "#生成一个LassoCV实例\n",
    "#lasso = LassoCV(alphas=alphas)  \n",
    "lasso = LassoCV()  \n",
    "\n",
    "#训练（内含CV）\n",
    "lasso.fit(x_train, y_train)  \n",
    "\n",
    "#测试\n",
    "y_test_pred_lasso = lasso.predict(x_test)\n",
    "y_train_pred_lasso = lasso.predict(x_train)\n",
    "\n",
    "\n",
    "#测试集\n",
    "print \"The RMSE of LassoCV on test is\",np.sqrt(metrics.mean_squared_error(y_test, y_test_pred_lasso))\n",
    "#训练集\n",
    "print \"The RMSE of LassoCV on train is\",np.sqrt(metrics.mean_squared_error(y_train, y_train_pred_lasso))\n",
    "\n",
    "# 评估，使用r2_score评价模型在测试集和训练集上的性能\n",
    "#print 'The r2 score of LassoCV on test is', r2_score(y_test, y_test_pred_lasso)\n",
    "#print 'The r2 score of LassoCV on train is', r2_score(y_train, y_train_pred_lasso)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEKCAYAAAAFJbKyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3XucVXW9//HXZ24M9+sgt+EOIhiiToCQipaKVHoqTKxM/WmaR+rYOafS6mRlds7RbnaxkxmZN7ygFhlFWhSmCcwgyB1GriOXGS4CA8xt78/vj70GdzADe8vsvfaeeT8fj/2Ytb/ru/f6LDbMm7W+a6+vuTsiIiKJygm7ABERyS4KDhERSYqCQ0REkqLgEBGRpCg4REQkKQoOERFJioJDRESSouAQEZGkKDhERCQpeWEXkAq9evXywYMHh12GiEhWKSsr2+3uRSfr1yqDY/DgwZSWloZdhohIVjGzLYn006kqERFJioJDRESSouAQEZGkKDhERCQpCg4REUmKgkNERJKi4BARkaQoOEREWonnllbwTOm2lG9HwSEi0gpEo84PXlrPb5a9lfJtKThERFqBRZv2sm3vEa46tzjl21JwiIi0As+UbqNzYR5Tz+yT8m0pOEREstzBmnrmrdzBh8/qR2F+bsq3p+AQEclyL7yxg5r6KFedOyAt21NwiIhkuWdKtzGidyfGFXdLy/YUHCIiWay8spqlW9/mqpIBmFlatqngEBHJYs+UbSM3x/jI2ek5TQUKDhGRrDZvxQ4uHFlEUed2adumgkNEJEtt3XOYbXuPcOHIk8722qIUHCIiWerVN3cDMGlYz7RuV8EhIpKlXnlzD707t2N4705p3W7KgsPMZplZpZmtjGs7y8z+YWYrzOx3ZtYlbt2dZlZuZuvM7LK49qlBW7mZ3ZGqekVEsom78483dzNpWM+0XU3VKJVHHA8DU49pewi4w93fAzwPfBHAzEYDM4AxwWseMLNcM8sFfgpcDowGrgn6ioi0aet2HWR3dR2ThvdK+7ZTFhzuvhDYe0zz6cDCYPlF4GPB8pXAk+5e6+6bgHJgfPAod/eN7l4HPBn0FRFp014p3wPA5NYUHM1YCVwRLF8FNN7GsT8QfxP5iqCtufbjmNnNZlZqZqVVVVUtWrSISKZ5tXw3g3t2oH+39mnfdrqD4/8Bt5lZGdAZqAvamzpB5ydoP77R/UF3L3H3kqKi9F6aJiKSTg2RKIs27Q3lNBVAXjo35u5rgUsBzGwk8MFgVQXvHH0ADAC2B8vNtYuItElvvLWf6toGJg8LJzjSesRhZr2DnznA14D/C1bNBWaYWTszGwKMABYDS4ARZjbEzAqIDaDPTWfNIiKZ5tXy2Pc3zkvz9zcapeyIw8xmA1OAXmZWAdwFdDKz24IuzwG/AnD3VWb2NLAaaABuc/dI8D4zgflALjDL3VelqmYRkWzwSvkeRvftQo+OBaFsP2XB4e7XNLPq/mb63wPc00T7PGBeC5YmIpK1qmsbKN2ylxsmDwmtBn1zXEQki/x9w27qI87Fo3qHVoOCQ0Qki/xl7S46F+Zx7qDuodWg4BARyRLRqLNgXRUXjiwiPze8X98KDhGRLLFy+36qDtaGepoKFBwiIlnjL2srMYMppys4REQkAQvWVnJ2cbfQLsNtpOAQEckClQdrWF6xP/TTVKDgEBHJCn9dF7t568WjTgu5EgWHiEhW+MuaSvp2LeSMvp3DLkXBISKS6WrqI7y8oYopp/dO+2x/TVFwiIhkuIXrqzhUF+HyM/uEXQqg4BARyXi/X7GD7h3yQ7sb7rEUHCIiGaymPsKf11Ry2Zg+oX5bPF5mVCEiIk1auL6K6toGpr2nb9ilHKXgEBHJYPNW7KBbBp2mAgWHiEjGqqmP8NKaSi4bnTmnqUDBISKSsY6ephqbOaepQMEhIpKxGk9TTcqg01Sg4BARyUiZepoKFBwiIhlp/qqdVNc2cOW4fmGXchwFh4hIBppTVsGA7u2ZODSzTlNBCoPDzGaZWaWZrYxrG2dmr5nZMjMrNbPxQbuZ2Y/MrNzM3jCzc+Jec52ZbQge16WqXhGRTLH97SP8vXw3HztnADk54d+b6lipPOJ4GJh6TNu9wDfdfRzw9eA5wOXAiOBxM/AzADPrAdwFTADGA3eZWXgztIuIpMFzSytwh+nnDgi7lCalLDjcfSGw99hmoEuw3BXYHixfCTziMa8B3cysL3AZ8KK773X3fcCLHB9GIiKthrszp6yCiUN7UNyjQ9jlNCkvzdu7HZhvZt8lFlqTgvb+wLa4fhVBW3PtIiKtUtmWfWzec5iZF48Iu5RmpXtw/FbgC+5eDHwB+GXQ3tRJPD9B+3HM7OZg3KS0qqqqRYoVEUm3Z0or6FCQmzG3UG9KuoPjOuC5YPkZYuMWEDuSKI7rN4DYaazm2o/j7g+6e4m7lxQVFbVo0SIi6XC4roHfr9jBB9/Tl47t0n1CKHHpDo7twIXB8sXAhmB5LvDp4OqqicB+d98BzAcuNbPuwaD4pUGbiEir89zSt6iubWDG+OKTdw5RyiLNzGYDU4BeZlZB7OqozwD3m1keUEPsCiqAecA0oBw4DNwA4O57zexuYEnQ71vufuyAu4hI1nN3fv3qZs7s34VzBmb2xaMpCw53v6aZVec20deB25p5n1nArBYsTUQk47z65h42VFbz3avOyoh5xU9E3xwXEckAD7+6mR4dC/hQht0JtykKDhGRkG3be5g/r9nFNeOLKczPDbuck1JwiIiE7NHXtmBmfGrioLBLSYiCQ0QkREfqIjy1ZBtTx/Shb9f2YZeTEAWHiEiIZi/eyv4j9dwweXDYpSRMwSEiEpLahgg/X/gmE4b0oGRwj7DLSZiCQ0QkJHPKKth1oJbPZfB9qZqi4BARCUF9JMrP/vomZw/sxuThmTdZ04koOEREQvDbZdup2HeEz108POO/8HcsBYeISJpFos4DC8oZ3bcLF53eO+xykqbgEBFJs9+8/hYbdx/KyqMNUHCIiKRVTX2E7/1pHWMHdOWyMZk758aJKDhERNJo1iub2L6/hq9MO4OcnOw72gAFh4hI2uypruVnC97kA2f0ZuLQ7LqSKp6CQ0QkTX78l3IO10e44/JRYZdyShQcIiJpsLGqmsde28LV7y1meO/OYZdzShQcIiIp5u78129X0r4gl9s/kF3fEm+KgkNEJMWef/0tXinfw5enjqJ358KwyzllCg4RkRTad6iOb/9+DWcP7MYnxg8Mu5wWoeAQEUmh78xbw4Ej9fz3R9+TtZffHkvBISKSIq+W7+aZsgo+c8FQRvXpEnY5LUbBISKSAm8fruM/nlnOkF4d+XyW3Tb9ZFIWHGY2y8wqzWxlXNtTZrYseGw2s2Vx6+40s3IzW2dml8W1Tw3ays3sjlTVKyLSUtydrzy/gqqDtdw/YxztC3LDLqlF5aXwvR8GfgI80tjg7lc3LpvZ94D9wfJoYAYwBugHvGRmI4OuPwUuASqAJWY2191Xp7BuEZFT8kxpBfNW7OTLU0cxdkC3sMtpcSkLDndfaGaDm1pnsdtBfhy4OGi6EnjS3WuBTWZWDowP1pW7+8bgdU8GfRUcIpKRNu0+xDd+t4rzhvbklguGhl1OSoQ1xnE+sMvdNwTP+wPb4tZXBG3NtYuIZJwjdRFufayMgrwcvn/1Wa3mKqpjhRUc1wCz45439afrJ2g/jpndbGalZlZaVVXVAiWKiCSucVxj3a6D/PDqcfTt2j7sklIm7cFhZnnAR4Gn4porgOK45wOA7SdoP467P+juJe5eUlRU1LJFi4icxGOvbeH519/i9vePZEoWzuqXjDCOOD4ArHX3iri2ucAMM2tnZkOAEcBiYAkwwsyGmFkBsQH0uWmvWETkBF7fuo9vvbCai04v4nMXDw+7nJRL5eW4s4F/AKebWYWZ3RismsE/n6bC3VcBTxMb9P4jcJu7R9y9AZgJzAfWAE8HfUVEMsL+w/XMfOJ1TutSyA+vPrvVjmvEM/cmhwyyWklJiZeWloZdhoi0cu7OLY+WsWBdJXM+O4mzirP70lszK3P3kpP10zfHRUTepV+/upk/rd7Fl6eOyvrQSIaCQ0TkXVj51n6+M28t7x/VmxvfNyTsctJKwSEikqRDtQ3MfGIpPTsV8N2rziL2nea2I5W3HBERaZXumruKrXsPM/szE+nesSDsctJORxwiIkmYu3w7c8oqmHnRcCYM7Rl2OaFQcIiIJGjb3sN89bkVnDuoO59/f+u6VXoyFBwiIgmIRJ1/f3oZGPzw6nHk5bbdX58J7bnFfMrMvh48H2hm40/2OhGR1uJXr2xiyeZ9fOPDYyju0SHsckKVaGQ+AJxH7OaEAAeJzZMhItLqbayq5r756/jAGb356Dm6QXeiV1VNcPdzzOx1AHffF9w7SkSkVYtEnS/OeYPC/Fy+85H3tLlLb5uSaHDUm1kuwS3NzawIiKasKhGRDDHr75so27KPH149jt5dCsMuJyMkeqrqR8DzQG8zuwf4O/CdlFUlIpIBNlZV890/reOS0adx5bh+YZeTMRI64nD3x82sDHg/scmV/sXd16S0MhGREEWizpeCU1T3fORMnaKKk+hVVcOATe7+U2AlcImZtZ07eolIm/PrVzdTumUfd314NL076xRVvERPVT0LRMxsOPAQMAR4ImVViYiEaPPuQ9w7fy0Xj+rNR87WVVTHSjQ4osGkSh8F7nf3LwB9U1eWiEh4/uu3K8nPzdFVVM1INDjqzewa4NPAC0FbfmpKEhEJzxsVb/Pyht18/uIR9OmqU1RNSTQ4biD2BcB73H1TMC/4Y6krS0QkHL94eROd2+UxY3xx2KVkrESvqloNfD7u+Sbgf1JVlIhIGCr2HWbeih3c+L4hdC7USZXmJHpV1YfM7HUz22tmB8zsoJkdSHVxIiLp9KtXNmPA9ZMGh11KRkv0m+M/JDYwvsLdPYX1iIiEYv+Rep5cvJUPje1Lv27twy4noyU6xrENWKnQEJHWavbirRyqi3DT+UPDLiXjJRocXwLmmdmdZvbvjY8TvcDMZplZpZmtPKb9c2a2zsxWmdm9ce13mll5sO6yuPapQVu5md2RzM6JiCSipj7Cr17ZxKRhPTmzf9ewy8l4iZ6qugeoBgqBRO+K+zDwE+CRxgYzuwi4Ehjr7rVm1jtoHw3MAMYA/YCXzGxk8LKfApcAFcASM5sbDNaLiLSIp0u3setALT/4+LiwS8kKiQZHD3e/NJk3dveFZjb4mOZbgf9x99qgT2XQfiXwZNC+yczKgcaJosrdfSOAmT0Z9FVwiEiLqKmP8MCCNxk/uAfnDWubc4gnK9FTVS+ZWVLB0YyRwPlmtsjM/mZm7w3a+xMbR2lUEbQ11y4i0iKeWrKNnQdquP0DI/Qt8QSdNDgs9if5JeCPZnbkFC/HzQO6AxOBLwJPB+/f1KflJ2hvqs6bzazUzEqrqqreRWki0tbU1Ed44K/lOtpI0kmDI7iSapm757h7e3fv4u6d3b3Lu9heBfCcxywmNhlUr6A9/muaA4DtJ2hvqs4H3b3E3UuKioreRWki0tY8tSQ2tqGjjeQkeqrqH3GnlU7Fb4CLAYLB7wJgNzAXmGFm7YLbmYwAFgNLgBFmNiSYqnZG0FdE5JTUNURjRxtDdLSRrEQHxy8CPmtmm4FDxE4hubuPbe4FZjYbmAL0MrMK4C5gFjAruES3DrguOKJZZWZPExv0bgBuc/dI8D4zgflALjDL3VclvZciIseYu3w7uw7Ucu/0s3S0kSRL5Dt9ZjaoqXZ339LiFbWAkpISLy0tDbsMEclQ7s7l97+MO/zx9vMVHAEzK3P3kpP1S/QmhxkZECIi78bfy3ezdudB7p0+VqHxLiQ6xiEi0mo89PImijq348px/cIuJSspOESkTVm/6yB/W1/FdecNol1ebtjlZCUFh4i0KQ+9vJHC/Bw+OaHJoVtJgIJDRNqMnftr+M3r25l+7gC6d0z0tntyLAWHiLQZD/y1nKg7t1wwLOxSspqCQ0TahO1vH+HJxdu4qqSY4h4dwi4nqyk4RKRN+OmCchxn5sXDwy4l6yk4RKTV27b3ME+XbmPGewfSX9PCnjIFh4i0ej9dUI5h/OtFGttoCQoOEWnVNlZVM6esgk9MGEjfrjraaAkKDhFp1b4zbw2F+bncdpHGNlqKgkNEWq2XN1Tx0ppKZl48nKLO7cIup9VQcIhIq9QQiXL3C6sZ1LMDN0weHHY5rYqCQ0RapScWb2X9rmq+Mu0M3ZOqhSk4RKTV2Xeoju+/uJ5Jw3py6ejTwi6n1VFwiEirc/fvV1Nd08DXPzxa822kgIJDRFqVBesqeW7pW9w6ZRij+nQJu5xWScEhIq1GdW0DX31uBcN7d9KtRVIooaljRUSywf/+YS07DtQw57OTNCCeQjriEJFW4dU3d/Poa1u4YdIQzh3UPexyWjUFh4hkvb2H6vjCU8sYWtSR/7xsZNjltHopCw4zm2VmlWa2Mq7tG2b2lpktCx7T4tbdaWblZrbOzC6La58atJWb2R2pqldEspO786U5y9l3qJ4fX3M2HQp0Bj7VUnnE8TAwtYn2H7j7uOAxD8DMRgMzgDHBax4ws1wzywV+ClwOjAauCfqKiADwyD+28NKaSu6cNoox/bqGXU6bkLJodveFZjY4we5XAk+6ey2wyczKgfHBunJ33whgZk8GfVe3cLkikoVWbd/PPfPWcPGo3lw/aXDY5bQZYYxxzDSzN4JTWY0jWP2BbXF9KoK25tqPY2Y3m1mpmZVWVVWlom4RySD7DtVxy6Nl9OhQwH3Tx+qLfmmU7uD4GTAMGAfsAL4XtDf1ifsJ2o9vdH/Q3UvcvaSoqKglahWRDNUQiTJz9lIqD9by82vPpWcn3fk2ndI6iuTuuxqXzewXwAvB0wqgOK7rAGB7sNxcu4i0UffNX8cr5Xu4d/pYziruFnY5bU5ajzjMrG/c048AjVdczQVmmFk7MxsCjAAWA0uAEWY2xMwKiA2gz01nzSKSWZ4tq+DnCzdy7cRBfLyk+OQvkBaXsiMOM5sNTAF6mVkFcBcwxczGETvdtBm4BcDdV5nZ08QGvRuA29w9ErzPTGA+kAvMcvdVqapZRDLbH1fu5EvPvsHk4T35rw/pAsuwmHuTQwZZraSkxEtLS8MuQ0Ra0Msbqrjx4VLG9O/CYzdOoGM7fV+jpZlZmbuXnKyfvjkuIhlv8aa93PxIGUOLOvLw9eMVGiFTcIhIRntp9S6u/eUi+nYr5NEbJ9C1Q37YJbV5Cg4RyVhzyiq45bEyTu/TmWduOY+izrrsNhPoeE9EMo6788Bf3+S++euYPLwnP7+2hE46PZUx9EmISEaprm3gi88s5w8rd3LFWf2476qxmlsjwyg4RCRjbKyq5pZHy3izqpqvTjuDm84foluJZCAFh4iEzt15YvFWvv3CGgrzc3j0xglMHt4r7LKkGQoOEQlV5cEavjznDRasq+J9w3tx31Vj6du1fdhlyQkoOEQkFA2RKI/8Yws/eGk9dQ1RvvHh0Xz6vMHk5OjUVKZTcIhI2i3auIev/3YV63Yd5PwRvfjGFWMYVtQp7LIkQQoOEUmbmvoI352/jof+von+3drz82vP5dLRp2kAPMsoOEQkLVZt388XnlrG+l3VXDtxEHdOG6X5wbOUPjURSSl357HXtnD3C2vo1iGfh294L1NO7x12WXIKFBwikjLVtQ3c+dwKfrd8O1NOL+L7Hx9Hj44FYZclp0jBISIpsf3tI1z7y0Vs2n2IL152OrdeOExXTLUSCg4RaXGbdh/iUw8t4sCReh67aQKThunLfK2JgkNEWtTanQf41EOLiboz++aJnNm/a9glSQtTcIhIi1m9/QCfeOg1CvNyeeymCQzv3TnskiQFFBwi0iI27DrItb9cRPv8XJ66+TwG9uwQdkmSIprISURO2abdh/jkQ4vIyTGe+MxEhUYrp+AQkVNSXlnNJ3/xGg1R54mbJjCkV8ewS5IU06kqEXnXSjfv5aZHSsnLMR69cTwjTtOYRluQsiMOM5tlZpVmtrKJdf9pZm5mvYLnZmY/MrNyM3vDzM6J63udmW0IHtelql4RSc4fV+7gEw8tonuHAp67dTJj+unqqbYilaeqHgamHttoZsXAJcDWuObLgRHB42bgZ0HfHsBdwARgPHCXmXVPYc0ichKRqPP9F9dz6+NLObNfF569dZLGNNqYlAWHuy8E9jax6gfAlwCPa7sSeMRjXgO6mVlf4DLgRXff6+77gBdpIoxEJD0qD9bwqYcW8aM/b+Bj5wzg8Zsm6hYibVBaxzjM7ArgLXdffsxtlPsD2+KeVwRtzbU39d43EztaYeDAgS1YtYgA/G19Ff/x9HKqa+u5b/pYriopDrskCUnagsPMOgBfBS5tanUTbX6C9uMb3R8EHgQoKSlpso+IJK+mPsL//GEtD7+6mRG9O/H4TRM4vY8GwduydB5xDAOGAI1HGwOApWY2ntiRRPx/XwYA24P2Kce0/zUNtYoIsduH/NvsZazbdZDrJw3mjstHUZifG3ZZErK0BYe7rwCO3oTfzDYDJe6+28zmAjPN7EliA+H73X2Hmc0HvhM3IH4pcGe6ahZpq9ydh1/dzH//YS1dCvP51Q3v5SLNoSGBlAWHmc0mdrTQy8wqgLvc/ZfNdJ8HTAPKgcPADQDuvtfM7gaWBP2+5e5NDbiLSAupPFjDl+e8wYJ1VVw8qjf3Th9Lr07twi5LMoi5t77hgJKSEi8tLQ27DJGs4u48u/Qt7n5hNUfqI3ztg2dw7cRBmg+8DTGzMncvOVk/fXNcRKjYd5ivPr+Sv62vomRQd/53+liGFXUKuyzJUAoOkTastiHCLxZu5CcLyskx45tXjOHaiYM0U5+ckIJDpA1yd15cvYvvzFvD5j2HmfaePnztg6Pp16192KVJFlBwiLQh7s7CDbv53p/W8UbFfoYWdeTRG8dz/oiisEuTLKLgEGkD6hqizFuxg1+9sonlFfvp3609904fy0fP7k9ermZXkOQoOERasV0Hapi9eCuPL9pK1cFahvbqyLf/5Uw+XlJMQZ4CQ94dBYdIK7R06z5+sXAjf1q9i0jUuXBkETdMH8wFI4o08C2nTMEh0oocqKnnf/+wlscXbaVbh3xufN8QPjF+IIM1K5+0IAWHSCvg7sxftYu75q6k6mAtN75vCP9+yUg6ttM/cWl5+lslkuXW7DjAt3+/mlfK9zCqT2d+fm0J44q7hV2WtGIKDpEste9QHd/90zpmL95Kl/b5fPOKMXxiwkDydZWUpJiCQyTLRKLOU0u2ce/8tRysaeDT5w3m9g+MoFsHzcQn6aHgEMkS7s6f11Tywz+vZ+VbBxg/pAd3X3mmJlWStFNwiGS4aNT50+qd/Pgv5azafoDiHu25f8Y4rjirn+5cK6FQcIhkqNqGCL95/S1+vnAjG6sOMbhnB+6bPpZ/Obu/xjEkVAoOkQxTeaCG2Yu38fiiLVQerGV03y786JqzmXZmH90eRDKCgkMkA9Q1RHl5QxXPv/4Wf1y5k4aoc8HIIr571RDOH9FLp6Qkoyg4REJysKaeV8r38Oc1u5i/aicHahro2j6f6yYN5lMTBzFE3/aWDKXgEEmT3dW1LNv6Nsu2vc3izXtZumUfDVGnc7s8Lhl9Gh8+qx+Th/fSzQcl4yk44tRHopRu3keOQW6OkZNj5JiRa4YFbbmNbTmx9pwcjrbFHu+8NjfoZ0bcsk45tHbuzu7qOjZUHmT19gMsr9jPsm372Lb3CAB5OcYZfbtw8wVDuXBkEecM6q7BbskqCo44+4/Uc80vXkvpNo4GS2P4BI+8oz9z/ul5bo6Rl2vk5uSQHyzn5eQc/Zmfa+Tlxn7m5+SQnxdrL8gL2nJzgsc7ywV5ObTLy6EgWI49z32nPfjZLi+Xdvmxfu3ychR6ceojUXbur2HbvsNU7D3Ctn2H2bb3MFv3HmbT7kPsO1x/tG+/roWMG9iNaycO4uyB3TmzX1faF+SGWL3IqUlZcJjZLOBDQKW7nxm03Q1cCUSBSuB6d99usd9I9wPTgMNB+9LgNdcBXwve9tvu/utU1dylMJ/Zn5lI1J1I1Im44+5EoxBxJxq0RaIe9IldYx/1WHvUY88b1x/t0/h+QXtD1I/2azj6Xk5D5J33r49Ej76mofERidIQcQ43NNAQdeojQVvUqWuI0hCNra8L+tUH61pKY9Dk59rRUCnMy6Uw/52QKczPpTA/l/Zxy+3yco7+bJeXQ7u4tsL8XArjl4P3KgxeX5Cbk5LbgLvH/vxqGiLU1EWoqY9yuL6Bw3URjtRFOFjTwIGaeg4cqWff4Tr2Hqpjd3UdlQdr2fH2Eaqqa/G4P9ocg37d2lPcvQNTz+zDiN6dGXFaJ07v05nenQtbvH6RMJl7y/1i+ac3NrsAqAYeiQuOLu5+IFj+PDDa3T9rZtOAzxELjgnA/e4+wcx6AKVACeBAGXCuu+870bZLSkq8tLQ0JfuVbaJRpz4apT4ShEskSm1DlLpIlLqG4BGJUlsfpS4Soa4hSk19rL02EqW2PhLr3xA9+rOxX21DlJr62C/dmqBf/M8j9RFq66PUNEQ4lb9mjYF19Ggr55+P1gwwAzOj8e+zA+78Uyg3ROP2tyGacE25OUb3DgX07FhAUed29O1aSN+uhbGg6NGB4u4d6NutUKebJOuZWZm7l5ysX8qOONx9oZkNPqbtQNzTjsT+fUPsKOQRj/2rf83MuplZX2AK8KK77wUwsxeBqcDsVNXd2uTkGO1ycmmXB7QLpwZ3P/rLuvaYkPnn5eBnwzuBU1v/TmA1BAEYiUaPHsk1RGNHhR5sxzAIDlBygzGnHAtO8eXGTvc1Hv0U/NORTi7t83PpUJBL+4JcOhfm0aUwny6F+XQuzNPkRyJx0j7GYWb3AJ8G9gMXBc39gW1x3SqCtubaJYuYBae28nJBZ21Esl7aj63d/avuXgw8DswMmpv675yfoP04ZnazmZWaWWlVVVXLFCsiIscJ86TsE8DHguUKoDhu3QBg+wnaj+PuD7p7ibuXFBUVpaBcERGBNAeHmY2Ie3oFsDZYngt82mImAvvdfQcwH7jUzLqbWXdjjHnTAAAGQ0lEQVTg0qBNRERCksrLcWcTG9zuZWYVwF3ANDM7ndjluFuAzwbd5xG7oqqc2OW4NwC4+97gEt4lQb9vNQ6Ui4hIOFJ2OW6YdDmuiEjyEr0cVxeei4hIUhQcIiKSFAWHiIgkpVWOcZhZFbHB92zUC9gddhEtRPuSeVrLfoD2JRUGuftJv8/QKoMjm5lZaSKDU9lA+5J5Wst+gPYlTDpVJSIiSVFwiIhIUhQcmefBsAtoQdqXzNNa9gO0L6HRGIeIiCRFRxwiIpIUBUdIzGyqma0zs3Izu6OJ9e3M7Klg/aJjJ8XKJAnsy/VmVmVmy4LHTWHUeTJmNsvMKs1sZTPrzcx+FOznG2Z2TrprTFQC+zLFzPbHfSZfT3eNiTCzYjNbYGZrzGyVmf1bE32y4nNJcF+y4nOJzZ6mR1ofQC7wJjAUKACWE5tGN77PvwL/FyzPAJ4Ku+5T2JfrgZ+EXWsC+3IBcA6wspn104A/EJsnZiKwKOyaT2FfpgAvhF1nAvvRFzgnWO4MrG/i71dWfC4J7ktWfC464gjHeKDc3Te6ex3wJLHpc+NdCfw6WJ4DvN/MMnH+0kT2JSu4+0LgRHdfPjrFsbu/BjROcZxxEtiXrODuO9x9abB8EFjD8bOAZsXnkuC+ZAUFRzgSmRL3aB93byA21W7PtFSXnESn9/1YcBphjpkVN7E+G7S2qYzPM7PlZvYHMxsTdjEnE5yuPRtYdMyqrPtcTrAvkAWfi4IjHIlMiZvwtLkhS6TO3wGD3X0s8BLvHEllm2z5TBKxlNjtJc4Cfgz8JuR6TsjMOgHPAre7+4FjVzfxkoz9XE6yL1nxuSg4wpHIlLhH+5hZHtCVzDz1cNJ9cfc97l4bPP0FcG6aamtpCU9lnOnc/YC7VwfL84B8M+sVcllNMrN8Yr9oH3f355rokjWfy8n2JVs+FwVHOJYAI8xsiJkVEBv8nntMn7nAdcHydOAvHoyeZZiT7ssx55uvIHZuNxs1N8Vx1jGzPo1jZmY2ntjvgj3hVnW8oMZfAmvc/fvNdMuKzyWRfcmWzyVlU8dK89y9wcxmEps/PReY5e6rzOxbQKm7zyX2F+xRMysndqQxI7yKm5fgvnzezK4AGojty/WhFXwC1vR0x/kA7v5/NDPFcSZKYF+mA7eaWQNwBJiRof8xmQxcC6wws2VB21eAgZB1n0si+5IVn4u+OS4iIknRqSoREUmKgkNERJKi4BARkaQoOEREJCkKDhERSYqCQySOmVWf4uvnmNnQk/T5q5mdcH7pRPoc07/IzP6YaH+RU6HgEGkhwX2Fct19Y7q37e5VwA4zm5zubUvbo+AQaULwLeT7zGylma0ws6uD9hwzeyCYT+EFM5tnZtODl30S+G3ce/zMzEqDvt9sZjvVZvY9M1tqZn82s6K41VeZ2WIzW29m5wf9B5vZy0H/pWY2Ka7/b4IaRFJKwSHStI8C44CzgA8A9wW3TvkoMBh4D3ATcF7cayYDZXHPv+ruJcBY4EIzG9vEdjoCS939HOBvxL7h3SjP3ccDt8e1VwKXBP2vBn4U178UOD/5XRVJjm45ItK09wGz3T0C7DKzvwHvDdqfcfcosNPMFsS9pi9QFff842Z2M7F/Z32B0cAbx2wnCjwVLD8GxN/4rnG5jFhYQey2IT8xs3FABBgZ178S6JfkfookTcEh0rTmJs060WRaR4BCADMbAvwn8F5332dmDzeuO4n4ewA13lE4wjv/Vr8A7CJ2JJQD1MT1LwxqEEkpnaoSadpC4Gozyw3GHS4AFgN/JzYpVY6ZnUbsRoKN1gDDg+UuwCFgf9Dv8ma2k0PsxnYAnwje/0S6AjuCI55rid1YstFIoMk5xkVako44RJr2PLHxi+XEjgK+5O47zexZ4P3EfkGvJzaD2/7gNb8nFiQvuftyM3sdWAVsBF5pZjuHgDFmVha8z9UnqesB4FkzuwpYELy+0UVBDSIppbvjiiTJzDq5e7WZ9SR2FDI5CJX2xH6ZTw7GRhJ5r2p379RCdS0ErnT3fS3xfiLN0RGHSPJeMLNuQAFwt7vvBHD3I2Z2F7H5rrems6DgdNr3FRqSDjriEBGRpGhwXEREkqLgEBGRpCg4REQkKQoOERFJioJDRESSouAQEZGk/H9JqDkNMBG7HAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('alpha is:', 6.0193843990413045)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>coef_lasso</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "      <th>columns</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>686.839316</td>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>645.977796</td>\n",
       "      <td>mnth_9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>439.489150</td>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>345.392558</td>\n",
       "      <td>mnth_10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>187.053072</td>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>252.076321</td>\n",
       "      <td>mnth_3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>-0.000000</td>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>-10.550228</td>\n",
       "      <td>mnth_2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>116.970723</td>\n",
       "      <td>mnth_4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>24.898835</td>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>111.760867</td>\n",
       "      <td>mnth_5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-93.965738</td>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>-147.679302</td>\n",
       "      <td>mnth_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>-0.000000</td>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>-121.196522</td>\n",
       "      <td>mnth_12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>-0.000000</td>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>-107.594401</td>\n",
       "      <td>mnth_8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>-117.342085</td>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>-306.081724</td>\n",
       "      <td>mnth_11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>-152.525400</td>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>-298.715958</td>\n",
       "      <td>mnth_6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>-306.190638</td>\n",
       "      <td>2.516870e+15</td>\n",
       "      <td>-480.360129</td>\n",
       "      <td>mnth_7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>9.817280</td>\n",
       "      <td>1.515382e+15</td>\n",
       "      <td>216.262305</td>\n",
       "      <td>weekday_6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>-288.299510</td>\n",
       "      <td>1.515382e+15</td>\n",
       "      <td>-159.770573</td>\n",
       "      <td>weekday_0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>38.198174</td>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>79.139881</td>\n",
       "      <td>weekday_5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>27.191082</td>\n",
       "      <td>weekday_3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>32.682578</td>\n",
       "      <td>weekday_2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>-0.000000</td>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>-29.175539</td>\n",
       "      <td>weekday_4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>-167.021779</td>\n",
       "      <td>1.074562e+15</td>\n",
       "      <td>-166.329734</td>\n",
       "      <td>weekday_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>75.484127</td>\n",
       "      <td>4.408200e+14</td>\n",
       "      <td>235.764349</td>\n",
       "      <td>workingday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>-261.148660</td>\n",
       "      <td>4.408200e+14</td>\n",
       "      <td>-292.256081</td>\n",
       "      <td>holiday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>313.773217</td>\n",
       "      <td>1.562924e+13</td>\n",
       "      <td>654.986098</td>\n",
       "      <td>season_4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>129.021332</td>\n",
       "      <td>1.562924e+13</td>\n",
       "      <td>264.767297</td>\n",
       "      <td>season_2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-206.414399</td>\n",
       "      <td>1.562924e+13</td>\n",
       "      <td>-31.094284</td>\n",
       "      <td>season_3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1101.470502</td>\n",
       "      <td>1.562924e+13</td>\n",
       "      <td>-888.659112</td>\n",
       "      <td>season_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>4463.573074</td>\n",
       "      <td>6.413185e+03</td>\n",
       "      <td>2514.457408</td>\n",
       "      <td>atemp</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>-1.129668e+03</td>\n",
       "      <td>2040.782568</td>\n",
       "      <td>temp</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>-1382.366333</td>\n",
       "      <td>-1.689877e+03</td>\n",
       "      <td>-1621.814438</td>\n",
       "      <td>windspeed</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>-2153.970680</td>\n",
       "      <td>-2.888695e+03</td>\n",
       "      <td>-2344.319988</td>\n",
       "      <td>hum</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>264.430577</td>\n",
       "      <td>-4.778037e+14</td>\n",
       "      <td>831.700749</td>\n",
       "      <td>weathersit_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>-0.000000</td>\n",
       "      <td>-4.778037e+14</td>\n",
       "      <td>568.417948</td>\n",
       "      <td>weathersit_2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>-1888.006546</td>\n",
       "      <td>-4.778037e+14</td>\n",
       "      <td>-1400.118696</td>\n",
       "      <td>weathersit_3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     coef_lasso       coef_lr   coef_ridge       columns\n",
       "12   686.839316  2.516870e+15   645.977796        mnth_9\n",
       "13   439.489150  2.516870e+15   345.392558       mnth_10\n",
       "6    187.053072  2.516870e+15   252.076321        mnth_3\n",
       "5     -0.000000  2.516870e+15   -10.550228        mnth_2\n",
       "7      0.000000  2.516870e+15   116.970723        mnth_4\n",
       "8     24.898835  2.516870e+15   111.760867        mnth_5\n",
       "4    -93.965738  2.516870e+15  -147.679302        mnth_1\n",
       "15    -0.000000  2.516870e+15  -121.196522       mnth_12\n",
       "11    -0.000000  2.516870e+15  -107.594401        mnth_8\n",
       "14  -117.342085  2.516870e+15  -306.081724       mnth_11\n",
       "9   -152.525400  2.516870e+15  -298.715958        mnth_6\n",
       "10  -306.190638  2.516870e+15  -480.360129        mnth_7\n",
       "25     9.817280  1.515382e+15   216.262305     weekday_6\n",
       "19  -288.299510  1.515382e+15  -159.770573     weekday_0\n",
       "24    38.198174  1.074562e+15    79.139881     weekday_5\n",
       "22     0.000000  1.074562e+15    27.191082     weekday_3\n",
       "21     0.000000  1.074562e+15    32.682578     weekday_2\n",
       "23    -0.000000  1.074562e+15   -29.175539     weekday_4\n",
       "20  -167.021779  1.074562e+15  -166.329734     weekday_1\n",
       "31    75.484127  4.408200e+14   235.764349    workingday\n",
       "30  -261.148660  4.408200e+14  -292.256081       holiday\n",
       "3    313.773217  1.562924e+13   654.986098      season_4\n",
       "1    129.021332  1.562924e+13   264.767297      season_2\n",
       "2   -206.414399  1.562924e+13   -31.094284      season_3\n",
       "0  -1101.470502  1.562924e+13  -888.659112      season_1\n",
       "27  4463.573074  6.413185e+03  2514.457408         atemp\n",
       "26     0.000000 -1.129668e+03  2040.782568          temp\n",
       "29 -1382.366333 -1.689877e+03 -1621.814438     windspeed\n",
       "28 -2153.970680 -2.888695e+03 -2344.319988           hum\n",
       "16   264.430577 -4.778037e+14   831.700749  weathersit_1\n",
       "17    -0.000000 -4.778037e+14   568.417948  weathersit_2\n",
       "18 -1888.006546 -4.778037e+14 -1400.118696  weathersit_3"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mses = np.sqrt(np.mean(lasso.mse_path_, axis = 1))\n",
    "plt.plot(np.log10(lasso.alphas_), mses) \n",
    "#plt.plot(np.log10(lasso.alphas_)*np.ones(3), [0.3, 0.4, 1.0])\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('rmse')\n",
    "plt.show()    \n",
    "            \n",
    "print ('alpha is:', lasso.alpha_)\n",
    "\n",
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(columns), \"coef_lr\":list((lr.coef_.T)), \"coef_ridge\":list((ridge.coef_.T)), \"coef_lasso\":list((lasso.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 总结\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最小二乘回归模型拟合出来的系数项的值很大，同时该模型在训练集上的RMSE误差最小，但是可以看出该模型在测试集上误差最大，这说明模型有可能存在过拟合的情况。而查看岭回归和Lasso回归模型，由于存在正则项，因此系数相较于最小二乘模型来说很小。而比较岭回归和Lasso回归的参数可以发现在某些不重要的特征上Lasso对应的权重项等于0.这主要看对应的特征与残差的相关性，如果特征与残差弱相关，这时的权重项就可能是0.岭回归和Lasso回归在测试集上的性能来看岭回归的误差更小，且岭回归在训练集上的误差也比Lasso回归小，因此从上面的结果来看，岭回归模型更适合对本数据进行预测。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
